Verwenden von SED zum Entfernen des Kommentars aus einer Konfigurationsdateizeile und Ersetzen von Text in einer Linux-Konfigurationsdatei

Verwenden von SED zum Entfernen des Kommentars aus einer Konfigurationsdateizeile und Ersetzen von Text in einer Linux-Konfigurationsdatei

Ich versuche, die Konfiguration bestimmter Parameter in meiner /etc/ssh/sshd_configDatei zu automatisieren, insbesondere die

#PermitRootLogin yes

Und

#LoginGraceTime 2m

Sie sollten lauten:

PermitRootLogin no
LoginGraceTime 60

Ich bin kein Skript-Ass, also haben Sie bitte Geduld mit mir …

Ich habe versucht, sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_configden Ball ins Rollen zu bringen, aber das Ergebnis ist seltsam. Es wird einfach die Datei ausgeblendet, an der ich gerade arbeite ...

Kann mir jemand die Verwendung von sed erklären?

Antwort1

Leiten Sie die Ausgabe in eine temporäre Datei um und benennen Sie die temporäre Datei anschließend in die Originaldatei um

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

Oder wenn Sie GNU haben, können Sie die Option für die Bearbeitung direkt vor Ort sedverwenden-i

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

Antwort2

Ähnlich wie @Bodos Antwort, aber diese Lösung lässt die Originalzeile unberührt und fügt die geänderte Version unterhalb der Originalzeile hinzu. Dies ist nur sinnvoll, wenn Sie die Originalzeile als Kommentar behalten möchten.

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

Hier verwenden wir eine Erfassungsgruppe \(...\), die beim Ersetzen durch ersetzt wird \1(weil wir zu faul sind, dieselbe Zeichenfolge erneut einzugeben).

Sed mit Option -ngibt nur die explizit gedruckten Zeilen aus, daher pwird der erste Befehl zum Drucken der unveränderten Zeilen und die nächsten beiden Befehle zum Drucken der geänderten Zeilen verwendet.

verwandte Informationen