GNU SEDを使用して行をコメント化し、新しい行を追加する

GNU SEDを使用して行をコメント化し、新しい行を追加する

RHEL 7 の /etc/ssh/sshd_config ファイルを編集して、ssh 構成を保護したいとします。

たとえば、Ciphers 行を置き換えて、元の行はそのままにしてコメント アウトします。また、rpm やインストール ISO を更新するたびに Red Hat がそれを壊さないように、文字列のできるだけ小さな部分をキーとして使用できることも必要です。

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

...になるはずです

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789 etc...

ファイル名が testfile で、内容が This is my test file であるテスト ファイルで、改行を検索して追加しようとしました。新しい行として No it's not を追加しようとしましたが、惨めに失敗しました。

sed -i '/This is my test file./aNo it's not.' testfile

それをどうやって実現するか、そしてさらに重要なのは、その背後にある重要な概念は何でしょうか?

答え1

以下のsedコマンドを試してみましたが、うまくいきました

指示

sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename

出力

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789

答え2

sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config

-i所定の位置に

-n明示的に印刷されない限り何も印刷されない

/p検索文字列の最後には、-n一致した文字列を上書きして強制的に印刷されます。

関連情報