你好,我想在文件前面添加文本。例如,我想将任务添加到 todo.txt 文件的开头。我知道,echo 'task goes here' >> todo.txt
但这会将行添加到文件末尾(这不是我想要的)。
答案1
Linux:
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
Mac OS X:
sed -i '.bak' '1s/^/task goes here\'$'\n/g' todo.txt
或者
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
或者
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
答案2
我认为一个更简单的选择是:
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
$(...)
这是因为在执行之前执行的命令todo.txt
被覆盖为> todo.txt
虽然其他答案也很好,但我发现这个更容易记住,因为我每天都使用 echo 和 cat。
编辑:如果 中有反斜杠,则此解决方案非常糟糕todo.txt
,因为多亏了-e
标志,echo 会解释它们。将换行符放入前言字符串的另一种更简单的方法是...
echo "task goes here
$(cat todo.txt)" > todo.txt
...只需使用换行符即可。当然,它不再是一行代码了,但实际上它以前也不是一行代码。如果您在脚本中执行此操作,并且担心缩进(例如,您在函数中执行此操作),则有一些解决方法可以使其仍然很好地适合,包括但不限于:
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
另外,如果你关心是否在 的末尾添加了换行符todo.txt
,请不要使用这些。好吧,除了倒数第二个。这不会影响结尾。
答案3
答案4
您可以创建一个新的临时文件。
echo "new task" > new_todo.txt
cat todo.txt >> new_todo.txt
rm todo.txt
mv new_todo.txt todo.txt
您也可以使用sed
或awk
。但基本上会发生相同的事情。