2012-05-23 54 views

回答

10

在2個步驟:

content=$(cat file.txt) # no cat abuse this time 
echo -en "foobar\n$content" >file.txt 
+1

仍然可以避開'cat': 'content =「$(

+0

@MarkReed有一個有趣的建議,可以在bash中使用,但不能在破折號中使用。我相信這是bash行爲不符合語言規範的另一個例子,因爲'在zsh中產生輸出,但不在bash中產生。 –

+0

請注意,以這種方式設置內容將放棄文件中的所有尾部空白,包括最終換行符。 –

6

這是非標準的,但如果你的sed支持-i,你可以這樣做:

sed -i '1i\ 
Foobar' file.txt 
+0

我不認爲\是必要的。 '1i Foobar'應該可以工作。 – dogbane

+0

@dogbane忽略掉換行符在某些sed中可用,但不是全部。如果它被遺漏,許多sed會窒息。 –

3

我會保持它的簡單。最簡單的,可能最快的解決方法非常簡單:

(echo "Foobar"; cat file.txt) >tmpfile 
cp tmpfile file.txt 
rm tmpfile 

如果不要緊,file.txt的索引節點的變化,由「MV」取代「CP」。比這更快的解決方案是不可能的,因爲Unix文件系統語義不支持預先添加到文件,只能附加。

+1

而不是cp和刪除,爲什麼不只是'mv tmpfile.txt file.txt'? –

+0

'如果'file.txt'的inode更改無關緊要,請將「cp」替換爲「mv」' –

+1

您真正關心inode更改的頻率如何? –

相關問題