我使用bash和linux來完成向文件頂部添加內容。 到目前爲止,我知道我可以通過使用臨時文件來完成此操作。所以 我這樣做是這樣的:如何將StdOut添加到文件頂部(而不是底部)?
tac lines.bar > lines.foo
echo "a" >> lines.foo
tac lines.foo > lines.bar
但有沒有這樣做,而無需編寫第二個文件的一個更好的辦法?
我使用bash和linux來完成向文件頂部添加內容。 到目前爲止,我知道我可以通過使用臨時文件來完成此操作。所以 我這樣做是這樣的:如何將StdOut添加到文件頂部(而不是底部)?
tac lines.bar > lines.foo
echo "a" >> lines.foo
tac lines.foo > lines.bar
但有沒有這樣做,而無需編寫第二個文件的一個更好的辦法?
echo a | cat - file1 > file2
一樣shellter的
和一行sed的。
sed -i -e '1 i<whatever>' file1
這將插入到file1 inplace。 the sed example i referred to
tac是非常昂貴的解決方案,尤其是當您需要使用它2x時。雖然你仍然需要使用一個tmp文件,這將花費更少的時間:每個音符
編輯從KeithThompson,現在使用的文件名和condtional /bin/mv
「$$」。
{
echo "a"
cat file1
} > file1.$$ && /bin/mv file1.$$ file1
我希望這有助於
我可能會寫成'(echo「a」; cat file1)> file1。$$ && mv file1。$$ file1'。 '。$$'後綴避免了對任何現有文件的破壞,如果命令失敗,'&&'避免了clobbering'文件。 – 2012-02-21 06:10:05
非常好的升級,謝謝。我仍然希望相信''''進程組更高效,儘管在實踐中我總是看到子進程正在產生這樣的事情。 – shellter 2012-02-21 06:24:20
使用到位更換一個命名管道和與sed
,你可以在文件的頂部添加一個命令的輸出,而不明確地需要一個臨時文件:
mkfifo output
your_command >> output &
sed -i -e '1x' -e '1routput' -e '1d' -e '2{H;x}' file
rm output
什麼這會緩衝your_command
在命名管道(fifo)中的輸出,並使用sed
的r
命令在此位置插入命令。爲此,您需要在後臺啓動your_command
以避免在FIFO中阻塞輸出。
請注意,r
命令在循環結束時輸出文件,所以我們需要在保留空間中緩衝第一行文件,並用第二行輸出。
我寫沒有明確需要臨時文件因爲sed
可能會使用一個自己。
謝謝這正是我需要的。 – l1zard 2012-02-22 11:26:40