在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中產生。 –
請注意,以這種方式設置內容將放棄文件中的所有尾部空白,包括最終換行符。 –