如何在Bash中添加文本到文件的开头?
你好,我想在一个文件中添加文本。例如,我想把任务添加到todo.txt文件的开头。我知道有echo 'task goes here' >> todo.txt
,但这是在文件的末尾添加文本(不是我想要的)。
你好,我想在一个文件中添加文本。例如,我想把任务添加到todo.txt文件的开头。我知道有echo 'task goes here' >> todo.txt
,但这是在文件的末尾添加文本(不是我想要的)。
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
或
sed -i '1s/^/task goes here\n/' todo.txt
或
sed -i '1itask goes here' todo.txt
&001
在我看来,一个更简单的方法是:
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
这样做是因为在$(...)
里面的命令被todo.txt
覆盖之前,> todo.txt
里面的命令会被执行。另一个更简单的方法是…..
echo "task goes here
$(cat todo.txt)" > todo.txt
…简单的说就是使用换行。当然,这已经不是单行字了,但实际上它以前也不是单行字。如果你在脚本中执行,并且担心缩进的问题(例如,你在函数中执行),有一些变通的方法可以使它仍然很好地适应,包括但不限于:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
还有,如果你关心todo.txt
的末尾是否有新的行,就不要使用这些。好吧,除了第二个到最后一个。这样就不会乱了结尾了。
moreutils
](http://joeyh.name/code/moreutils/)有一个不错的工具叫`sponge`:
echo "task goes here" | cat - todo.txt | sponge todo.txt
&001
它可以 “浸泡 "STDIN,然后写入文件,这意味着你不用担心临时文件和移动文件。
你可以通过moreutils
在很多Linux发行版上得到apt-get install moreutils
,通过brew install moreutils
,或者在OS X上使用Homebrew,用&007。
你可以在Ex模式下使用Vim:
ex -s -c '1i|task goes here' -c x todo.txt
1.1
选择第一行
2.i
插入
3.x
保存并关闭
您可以使用tee
:
echo 'task goes here' | cat - todo.txt | tee todo.txt