在Linux中向文件添加文本最簡單的方法是什麼?如何將文本附加到文件?
我看了一下at this question,但接受的答案使用了一個額外的程序(sed
)我敢肯定應該有一個更簡單的方法與echo
或類似。
在Linux中向文件添加文本最簡單的方法是什麼?如何將文本附加到文件?
我看了一下at this question,但接受的答案使用了一個額外的程序(sed
)我敢肯定應該有一個更簡單的方法與echo
或類似。
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
本質上講,你可以轉儲到該文件中任何你想要的文字。 CTRL-D發送一個文件結束信號,它終止輸入並將你返回到shell。
如何:
echo "hello" >> <filename>
使用>>
運營商將在文件末尾追加數據,同時使用>
如果已經存在將覆蓋該文件的內容。
你也可以以同樣的方式使用printf
:
printf "hello" >> <filename>
注意,這可能是危險的使用上面。例如,如果您已經有一個文件,並且需要將數據追加到文件末尾,並且忘記添加最後的文件,則文件中的所有數據都將被銷燬。當您嘗試做echo "hello" > file.txt
,你會得到一個警告說cannot overwrite existing file
set -o noclobber
現在:您可以通過在你的.bashrc
設置noclobber
變量更改此行爲。
要強制寫入文件,你現在必須使用特殊的語法:
echo "hello" >| <filename>
你也應該知道,在默認情況echo
增加了其可以通過使用-n
標誌來抑制拖尾換行字符:
echo -n "hello" >> <filename>
參考
在一般情況下,我喜歡比使用'cat'接受的答案這更多,但你最好小心確保使用''>>而不是'>'! – sixty4bit
@ sixty4bit - 完全同意,但我認爲你必須總是知道你有一個shell工作時做什麼,否則你可能會做這樣的事情'須藤RM-R /'=) – Cyclonecode
更好'須藤RM-R /比' 'sudo rm -rf /'!^_ ^是否有一個標誌會在用'>'覆蓋現有文件的內容之前要求確認?別名,總是使用這樣的國旗似乎是一個好主意。 – sixty4bit
其他可能的方式是:
echo "text" | tee -a filename
的-a將附加在文件的結尾。
根據接受的答案。
您需要的東西不是CTRL-D to designate the end if using this in a script。試試這個:
cat <<EOF>> filename
This is text entered via the keyboard or via a script.
EOF
這會將文本追加到指定的文件(不包括「EOF」)。
它採用here document (or heredoc)。
但是如果你需要sudo來追加到所陳述的文件,你會如果你在命令行中直接鍵入碰上利用定界符麻煩,由於I/O重定向。
當你在命令行中直接鍵入這種變化將工作:
sudo sh -c 'cat <<EOF>> filename
This is text entered via the keyboard.
EOF'
或者您可以使用tee
來避免使用帶有貓定界符時所看到的命令行sudo的問題:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
@JonKiparsky:對不起,我沒有看到這是寫在你的答案... –
我怎樣才能做到這一點時,該文件需要root權限? – UselesssCat