2016-04-04 22 views
0

GSSAPIAuthentication öğesini/etc/ssh/sshd_config dosyasında ayarlamak için bir kabuk komut dosyası programladım. senaryom iseTüm oluşumları sed kullanılarak tek bir desenle değiştirin

bu bölümü var:

if [ $(grep "^GSSAPIAuthentication no$" /etc/ssh/sshd_config >/dev/null; echo $?) -ne 0 ]; then 
    sed -i 's/^[#]*GSSAPIAuthentication.*$/GSSAPIAuthentication no/g' /etc/ssh/sshd_config 
fi 

Bu iyi çalışır, ancak tüm oluşumları yerine geçer:

#GSSAPIAuthentication hayır -> GSSAPIAuthentication hiçbir

#GSSAPIAuthentication evet - -> GSSAPIAuthentication no

GSSAPIAuthentication evet -> GSSAPIAuthentication no

GSSAPIAuthentication no ile birden çok satıra sahibim. Bunu, GSSAPIAuthentication no ile yalnızca tek bir satıra sahip olmak için nasıl değiştirebilirim?

Teşekkürler.

cevap

0

Bunu yapmak awk kullanarak öneririm:

awk '/GSSAPIAuthentication/ { if (!seen++) print "GSSAPIAuthentication no"; next } 1' file 

Bu istenen değiştirme ile "GSSAPIAuthentication" içeren bir satırın ilk örneğini değiştirir. Deseni eşleyen sonraki satırlar için !seen++ doğru olur, bu nedenle yazdırılmazlar ve bir sonraki kayda next atlar. Sonunda 1 her zaman doğrudur, böylece diğer satırlar yazdırılır.

Varolan dosyanın üzerine yazmak için, standart kalıp awk '...' /etc/ssh/sshd_config > tmp && mv tmp /etc/ssh/sshd_config'u kullanın (ancak sonuçtan memnun olduğunuzu kanıtlayana kadar bunu kaydederdim).

+0

Çalışıyor. Çok teşekkür ederim. –

İlgili konular