ファイルの最後の行の前にEOFステートメントを挿入します。

ファイルの最後の行の前に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この行の前のファイルから2行目に移動します。

この文を挿入せずに他の方法で挿入できることを知っていますが、EOF視覚的な効果のために読みやすくするためにこの形式を維持したいと思います。

答え1

ここで文書形式を同じに保ち、ファイルの最後の行の前に与えられたテキストを挿入するには、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に送信され、ここにすべて文書化されます。これを使用してファイルの最後の行を指定し、いくつかの$テキストを挿入しようとしていることを示しますi。テキストは次のとおりです。挿入されたテキストが終わったら、ピリオド(.)が完了したことをedに通知します。 Wファイルをディスクに書き戻し、quit。

縮小するには、ドル記号をエスケープするか、ここで引用した文書()を使用して、変数の現在の値またはnull(該当する変数が設定されていない場合)への拡張を防ぐ必要があります$ i$ied -s input << 'EOF' ...$ii

答え2

使用できますex(これはモデル)を編集してviこれを行います。

あなたはそれを使用することができます:readコマンドはコンテンツをファイルに挿入します。コマンドはファイル名を使用しますが、擬似/dev/stdinデバイスを使用して標準入力から読み取ることができるため、トークンを使用できます<<EOF

この:readコマンドは、表記法を使用できる範囲も使用します。この範囲はファイルの最後の行を意味する$-ように分類され、その範囲から1を引いてファイルの2行目に達します。 (これを使用しても構いません。)$-$-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

答え3

別のアプローチは、ファイルの最後の行を除いてすべてを印刷し、新しいテキストを印刷してから、ファイルの最後の行を印刷することです。次に、すべての出力を新しいファイルにリダイレクトします。

{
    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

関連情報