Wie lösche ich diese Zeichenfolge mit sed oder Perl aus einer Datei?

Wie lösche ich diese Zeichenfolge mit sed oder Perl aus einer Datei?

Ich möchte diese Zeichenfolge löschen:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Bitte melden Sie sich als Benutzer \"centos\" und nicht als Benutzer \"root\" an.';echo;sleep 10"

in der folgenden Datei:

keine Portweiterleitung, keine Agentenweiterleitung, keine X11-Weiterleitung, Befehl = "echo 'Bitte melden Sie sich als Benutzer \"centos\" und nicht als Benutzer \"root\" an.';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV9sc7lTrpAJb1UARLmNA08XD8Dy0hGJiX1E5qYk8MkH36xbBtcO6xeuncFr619pu+R/08jkYn9GIXlgPzD9THUpEI+m/OSp5nVPgIamiN7LudOSks6zwk9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

Antwort1

Bei der Datei handelt es sich um eine authorized_keysDatei für SSH, die häufig in zu finden ist ~/.ssh/authorized_keys. Sie hat eine Reihe von Feldern, und das Feld, das Sie entfernen möchten, ist das erste optionale „Options“-Feld.

Das zweite Feld ist das Feld „Schlüsseltyp“, das je nach Handbuch einen der Werte ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519, ssh-dssoder hat.ssh-rsasshd

Wir können diese Tatsache nutzen, um das Optionsfeld zu entfernen:

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

Oder Sie können sed -i ...die Datei direkt ändern, wenn Sie wissen, wie dies normalerweise unter Unix funktioniert (das -iFlag funktioniertleichtunterschiedlich in verschiedenen Implementierungen von sed).

Der sedBearbeitungsbefehl s/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/gleicht den erweiterten regulären Ausdruck ab ^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))und ersetzt den übereinstimmenden Text durch den in der Zeile gefundenen Schlüsseltyp. Der Ausdruck stimmt mit allem vom Anfang jeder Eingabezeile bis einschließlich einem der gültigen Schlüsseltypen überein.

Antwort2

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

Sie müssen wahrscheinlich einige Satzzeichen in Ihrer Zeichenfolge maskieren.

verwandte Informationen