sed または perl を使用してファイルからこの文字列を削除するにはどうすればよいでしょうか?

sed または perl を使用してファイルからこの文字列を削除するにはどうすればよいでしょうか?

この文字列を削除したい:

no-port-forwarding、no-agent-forwarding、no-X11-forwarding、command="echo 'ユーザー \"root\" ではなく、ユーザー \"centos\" としてログインしてください。';echo;sleep 10"

以下のファイル内:

no-port-forwarding、no-agent-forwarding、no-X11-forwarding、command="echo 'ユーザー \"root\" ではなく、ユーザー \"centos\" としてログインしてください。';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV9sc7lTrpAJb1UARLmNA08XD8Dy0hGJiX1E5qYk8MkH36xbBtcO6xeuncFr619pu+R/08jkYn9GIXlgPzD9THUpEI+m/OSp5nVPgIamiN7LudOSks6zwk9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

答え1

ファイルはauthorized_keysSSH 用のファイルで、 によく見られます~/.ssh/authorized_keys。このファイルにはいくつかのフィールドがあり、削除するフィールドは最初のオプションの「オプション」フィールドです。

2 番目のフィールドは「keytype」フィールドで、マニュアルに従ってecdsa-sha2-nistp256、、、、、 またはecdsa-sha2-nistp384のいずれかecdsa-sha2-nistp521の値が設定されます 。ssh-ed25519ssh-dssssh-rsasshd

この事実を利用して、オプション フィールドを削除することができます。

sed -E 's/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/' ~/.ssh/authorized_keys >~/.ssh/authorized_keys.new &&
mv ~/.ssh/authorized_keys.new ~/.ssh/authorized_keys &&
chmod go-rwx ~/.ssh/authorized_keys

または、sed -i ...Unixでこれが通常どのように機能するかを知っている場合は、ファイルを変更するには、フラグを使用することができます(フラグ-iわずかにの異なる実装では異なりますsed

編集sedコマンドは、s/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/拡張正規表現に一致し^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))、一致したテキストを行にあるキー タイプに置き換えます。この表現は、入力の各行の先頭から有効なキー タイプまでの任意のものに一致します。

答え2

sed -i 's/your_string//g' filename

your_string 内の一部の句読点をエスケープする必要がある可能性があります。

関連情報