web-dev-qa-db-ja.com

ファイルの最後の行の前に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

ファイルの2行目から最後の行、# End of file行の前。

他の方法を使用してEOFを使用せずにこのステートメントを挿入できることはわかっていますが、見栄えのために、読みやすくするためにこの形式を維持したいと考えました。

3
Eli

同じ種類のヒアドキュメント形式を維持し、ファイルの最後の行の直前に所定のテキストを挿入するには、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に送信されます。ファイルの最後の行を$でアドレス指定し、insertテキストを入力するとします。例のように、テキストが続きます。挿入したテキストの処理が完了したら、1つのピリオド(.)で完了したことを通知します。 Writeファイルをディスクに戻し、次にquit。

$ i$iに縮小する場合は、ドル記号をエスケープするか、引用符付きのヒアドキュメント(ed -s input << 'EOF' ...)を使用して、$iが展開されないようにします。 i変数の現在の値、またはそのような変数セットがない場合は空。

7
Jeff Schaller

別の方法:ファイルの最終行を除くすべてを印刷し、新しいテキストを印刷してから、ファイルの最終行を印刷します。次に、すべての出力を新しいファイルにリダイレクトします。

{
    sed '$d' limits.conf
    cat <<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
    tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
0
glenn jackman