2016-08-03 5 views
0

ich mit ignore_broadcast_ssid=0
in der Datei /var/run/hostapd-phy0.conf ersetzen ignore_broadcast_ssid=1 ersetzen möchten.Verwendung sed ony ein Vorkommen in einem bestimmten Block

Das wäre meine erste Vermutung:

sed 's/ignore_broadcast_ssid=1/ignore_broadcast_ssid=0/g' /var/run/hostapd-phy0.conf 

Aber diese global diese Option ersetzt, Wie kann ich dies nur ersetzen in einem der Abschnitte, mit bss=wlan0-2 in der Datei zu beginnen?

... 

bss=wlan0-2 
ctrl_interface=/var/run/hostapd 
ap_isolate=1 
disassoc_low_ack=1 
preamble=1 
wmm_enabled=1 
ignore_broadcast_ssid=0 
uapsd_advertisement_enabled=1 
auth_algs=1 
wpa=0 
ssid=temp_wifi 
bridge=br-client 
bssid=a0:f3:c1:d8:b7:7c 

interface=client0 
ctrl_interface=/var/run/hostapd 
ap_isolate=1 
disassoc_low_ack=1 
preamble=1 
wmm_enabled=1 
... 
+0

Wo sind Ihre Sektionen? – Cyrus

+0

Ich habe mehr Details hinzugefügt – rubo77

Antwort

1

Sie können zunächst die Zeilennummer des ersten Text als Ausgangssuchindex herausfinden:

grep -n "bss=wlan0-2" 

Nehmen wir an, es bei Line ist 10. Dann wird Ihr sed Befehl an Folge gelten:

sed '10s/ignore_broadcast_ssid=1/ignore_broadcast_ssid=0/' /var/run/hostapd-phy0.conf 

Stellen Sie sicher, dass Sie nicht das Schlüsselwort g am Ende des Befehls haben, da es angibt, das übereinstimmende Muster global zu ersetzen.

+0

Sie brauchen 'LINE = $ (grep -n" bss = wlan0-2 "| cut -d ':' -f1)', nur um die Linie zu bekommen – rubo77

+0

Großartig! das funktioniert, um hinter einer bestimmten Zeichenfolge zu ersetzen. Und jetzt: [Wie ersetzt man das letzte Vorkommen, bevor man eine bestimmte Reihe trifft?] (Http://stackoverflow.com/questions/38749351/replace-the-latest-occurrence-of-a-string-before-a-irgendain) -row) – rubo77

1
sed '/bss=wlan0-2/,/ignore_broadcast_ssid/{s/ignore_broadcast_ssid=1/ignore_broadcast_ssid=0/}' file 
+0

Dies funktioniert auch, aber können Sie eine Erklärung hinzufügen und wo finden Sie weitere Informationen? – rubo77

+0

Dies begrenzt 'sed's Suchen und Ersetzen (' s /// ') auf Zeilen, die 'bss = wlan0-2' bis 'ignore_broadcast_ssid' enthalten. – Cyrus

+0

Das erklärt es ganz gut: http://www.computerhope.com/unix/used.htm - vor allem der Teil über "Adressbereiche" – rubo77

Verwandte Themen