2013-07-17 307 views

回答

75
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。

+0

@JonKiparsky:對不起,我沒有看到這是寫在你的答案... –

+1

我怎樣才能做到這一點時,該文件需要root權限? – UselesssCat

100

如何:

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> 

參考

+2

在一般情況下,我喜歡比使用'cat'接受的答案這更多,但你最好小心確保使用''>>而不是'>'! – sixty4bit

+0

@ sixty4bit - 完全同意,但我認爲你必須總是知道你有一個shell工作時做什麼,否則你可能會做這樣的事情'須藤RM-R /'=) – Cyclonecode

+0

更好'須藤RM-R /比' 'sudo rm -rf /'!^_ ^是否有一個標誌會在用'>'覆蓋現有文件的內容之前要求確認?別名,總是使用這樣的國旗似乎是一個好主意。 – sixty4bit

14

其他可能的方式是:

echo "text" | tee -a filename 

的-a將附加在文件的結尾。

7

根據接受的答案。

您需要的東西不是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