簡體   English   中英

在bash腳本中,是否可以將某些內容回顯到文件的開頭?

[英]In bash script, is it possible to echo something into the beginning of file?

我知道

echo text >> file.txt

我可以將“text”附加到文件file.txt的末尾

但是有可能在文件的開頭插入一些內容而不刪除現有內容嗎?

謝謝,

是的,你可以通過sed做到:

sed -i '' '1i\
some-text
' file

或使用awk:

awk -v T=some-text 'NR==1{print T} 1' file

沒有任何外部工具:

echo -e "some-text\n$(<file)" > file

您可以使用ed ,標准編輯器:

stuff="this is the stuff you want to prepend to file"
ed -s file.txt < <(printf '%s\n' 1 i "$stuff" . wq) > /dev/null

如果要添加幾行,請將它們放在一個數組中,如下所示:

stuffs=( "this is the first line you want to prepend to file" "lalala the second line" "my gorilla loves bananas in this third line" )
ed -s file.txt < <(printf '%s\n' 1 i "${stuffs[@]}" . wq) > /dev/null

唯一的限制是插入一個只包含一個句點的行。 嘆。

ed是標准編輯器。 此方法不涉及臨時文件! 如果您選擇此方法,您將真正編輯該文件(因此您不會更改權限和所有權)。 它可能是最有效的方法之一。 更有效的方法(用於huuuuge文件)是直接處理dd 但你肯定不希望這里。

正如Georgi Kirilov在下面的評論中建議的那樣,你可以使用這種方法而不需要任何基本原理:

stuffs=( "I love oranges, but my gorilla loves bananas" )
printf '%s\n' 1 i "$stuff" . wq | ed -s file.txt > /dev/null

如果你的系統附帶了printf (非常非常可能)。

您可以使用cat和臨時文件:

echo 'text' | cat - file.txt > temp && mv temp file.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM