Text-Processing

在文件的最後一行之前插入 EOF 語句

  • March 2, 2019

我想插入這個

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將文件寫入磁碟,然後quit。

如果你想折疊$ i$i你想轉義美元符號或使用帶引號的 here-document ( ed -s input << 'EOF' ...) 來防止$i擴展到變數的目前值,i或者如果沒有這樣的變數集則為空。

引用自:https://unix.stackexchange.com/questions/503902