在UNIX shell中有什么好的把戏将行追加到文件的开头?例如。类似于echo >>风格追加,但到一个文件的开头
echo "Foobar" >> file.txt
......但相反,新的行会预先存在的现有的?
在UNIX shell中有什么好的把戏将行追加到文件的开头?例如。类似于echo >>风格追加,但到一个文件的开头
echo "Foobar" >> file.txt
......但相反,新的行会预先存在的现有的?
在2个步骤:
content=$(cat file.txt) # no cat abuse this time
echo -en "foobar\n$content" >file.txt
这是非标准的,但如果你的sed支持-i,你可以这样做:
sed -i '1i\
Foobar' file.txt
我不认为\是必要的。 '1i Foobar'应该可以工作。 – dogbane
@dogbane忽略掉换行符在某些sed中可用,但不是全部。如果它被遗漏,许多sed会窒息。 –
我会保持它的简单。最简单的,可能最快的解决方法非常简单:
(echo "Foobar"; cat file.txt) >tmpfile
cp tmpfile file.txt
rm tmpfile
如果不要紧,file.txt的索引节点的变化,由“MV”取代“CP”。比这更快的解决方案是不可能的,因为Unix文件系统语义不支持预先添加到文件,只能附加。
而不是cp和删除,为什么不只是'mv tmpfile.txt file.txt'? –
'如果'file.txt'的inode更改无关紧要,请将“cp”替换为“mv”' –
您真正关心inode更改的频率如何? –
仍然可以避开'cat': 'content =“$(
@MarkReed有一个有趣的建议,可以在bash中使用,但不能在破折号中使用。我相信这是bash行为不符合语言规范的另一个例子,因为'在zsh中产生输出,但不在bash中产生。 –
请注意,以这种方式设置内容将放弃文件中的所有尾部空白,包括最终换行符。 –