2016-04-20 27 views
0

Ich möchte einen sed-Befehl in Linux tun, um die „#auth“Linux sed Wort in allgemeiner Weise ersetzen

Originaldatei Kommentar-

#%PAM-1.0 
auth   sufficient  pam_rootok.so 
# Uncomment the following line to implicitly trust users in the "wheel" group. 
#auth   sufficient  pam_wheel.so trust use_uid 

ich diesen Befehl schreiben kann, es zu tun:

sed 's/#auth.*sufficient.*pam_wheel.so trust use_uid/auth\t sufficient\t pam_wheel.so trust use_uid/' /etc/pam.d/su 

Aber ich denke, es ist zu lang. Gibt es einen besseren Weg dies zu tun (generischer)? Ich möchte die Zeilennummer nicht angeben, um sie zu ersetzen. Wenn jemand die Datei geändert hat, wird das Skript nicht normal ausgeführt.

Zum Beispiel: ". # Auth * ausreichend * pam_wheel.so Vertrauen use_uid"

Suche nach Stichwort, wenn gefunden, ersetzen diese das Wort "#auth" auf "Auth ", und fügen Sie dann die spätere Formulierung in der Zeile

Antwort

3

Mit GNU sed, suchen Sie die -i Option, die direkte Änderung ermöglicht und dann den regulären Ausdruck verankern. Zum Beispiel:

sed -i '/^#auth.*pam_wheel/s/^#//' INPUTFILE 

wird für die Linien aussehen mit „#auth“ ab, das „pam_wheel“ später auf der Linie und ersetzen Sie das „#“ am Anfang mit nichts enthalten.

+0

Angenommen, der Benutzer ist "root" oder erhöhte Berechtigungen. – sjsam

+0

Danke! Es klappt –