SED を使用して設定ファイルの行のコメントを解除し、Linux 設定ファイル内のテキストを置き換える

SED を使用して設定ファイルの行のコメントを解除し、Linux 設定ファイル内のテキストを置き換える

私は/etc/ssh/sshd_configファイル内の特定のパラメータの設定を自動化しようとしています。特に、

#PermitRootLogin yes

そして

#LoginGraceTime 2m

次のように読むべきです:

PermitRootLogin no
LoginGraceTime 60

私はスクリプトの専門家ではないので、ご容赦ください...

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config作業を開始しようとしましたが、奇妙な結果になりました。作業しようとしているファイルが単に cat で除外されるだけです...

誰かsedの使い方を教えてもらえませんか?

答え1

出力を一時ファイルにリダイレクトし、一時ファイルの名前を元のファイルに変更します。

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config

またはGNUをお持ちの場合は、インプレース編集のオプションsedを使用できます。-i

sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config

答え2

@Bodo の回答と似ていますが、この解決策では元の行はそのまま残し、変更されたバージョンを元の行の下に追加します。これは、元の行をコメントとして保持する場合にのみ意味があります。

 sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config

\(...\)ここでは、置換で に置き換えられる1 つのキャプチャ グループを使用します\1(同じ文字列を再度入力するのが面倒なため)。

オプション付きの sed は-n明示的に印刷された行のみを出力するため、最初のpコマンドは変更されていない行を印刷するために使用され、次の 2 つのコマンドは変更された行を印刷するために使用されます。

関連情報