Text-Processing
在文件的最後一行之前插入 EOF 語句
我想插入這個
cat <<EOF >> /etc/security/limits.conf * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 root soft nproc 65535 root hard nproc 65535 root soft nofile 65535 root hard nofile 65535 EOF
進入文件的倒數第二行,在該
# End of file
行之前。我知道我可以使用其他方法插入此語句而不使用,
EOF
但是對於視覺糖果,我想保持這種格式以及可讀性。
您可以使用
ex
(這是編輯器的一種模式)vi
來完成此操作。您可以使用該
:read
命令將內容插入到文件中。該命令採用文件名,但您可以使用/dev/stdin
偽設備從標準輸入中讀取,這允許您使用<<EOF
標記。該
:read
命令還需要一個範圍,您可以使用該$-
符號分解為$
,表示文件的最後一行,然後-
從中減去一個,得到文件的倒數第二行。(你也可以使用$-1
。)把它們放在一起:
$ ex -s /etc/security/limits.conf -c '$-r /dev/stdin' -c 'wq' <<EOF * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 root soft nproc 65535 root hard nproc 65535 root soft nofile 65535 root hard nofile 65535 EOF
是
-s
讓它靜音(不切換到視覺模式,這會使螢幕閃爍。)$-r
是縮寫(一個完整$-1read
的也可以),最後wq
是你在vi
. :-)**更新:**如果不是在最後一行之前插入,而是要在具有特定內容的行之前插入(例如“#End of file”),那麼只需使用
/search/
模式即可。例如:
$ ex -s /etc/security/limits.conf -c '/^# End of file/-1r /dev/stdin' -c 'wq' <<EOF ... EOF
要保持相同的 here-document 格式並在文件的最後一行之前立即插入給定的文本,請嘗試 ed!
ed -s /etc/security/limits.conf << EOF $ i * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 root soft nproc 65535 root hard nproc 65535 root soft nofile 65535 root hard nofile 65535 . wq EOF
這會向 ed 發送一系列命令,所有這些都在一個 here-document 中。我們在文件的最後一行使用
$
並說我們想i
插入一些文本。正文如下,就像您的範例一樣;一旦我們完成了插入的文本,我們告訴 ed 我們已經完成了一個句點 (.
)。W
將文件寫入磁碟,然後q
uit。如果你想折疊
$ i
到$i
你想轉義美元符號或使用帶引號的 here-document (ed -s input << 'EOF' ...
) 來防止$i
擴展到變數的目前值,i
或者如果沒有這樣的變數集則為空。