2016-08-03 37 views
0

我想ignore_broadcast_ssid=0
更換ignore_broadcast_ssid=1文件/var/run/hostapd-phy0.conf內。用sed來替換ONY一個發生在某塊

這將是我第一次的猜測:

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

但這全球替代這個選項,如何能我只在部分之一替換此,從bss=wlan0-2裏面的文件?

... 

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

你的部門在哪裏? – Cyrus

+0

我添加了更多的細節 – rubo77

回答

1

您可以先找出第一個文本作爲起始搜索索引的行號:

grep -n "bss=wlan0-2" 

讓我們假設它是在第10行,然後在後續應用你的sed命令:

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

確保在命令末尾沒有關鍵字g,因爲它指示全局替換匹配模式。

+0

你需要'LINE = $(grep -n「bss = wlan0-2」| cut -d':'-f1)'才能獲得該行 – rubo77

+0

太棒了!這適用於在某個字符串後面進行替換。現在:[你如何在觸及某一行之前替換最新的事件?](http://stackoverflow.com/questions/38749351/replace-the-latest-occurrence-of-a-string-before-a-certain -row) – rubo77

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

這也適用,但你可以添加一個解釋以及在哪裏可以找到更多信息? – rubo77

+0

這限制了'sed'的搜索並將包含'bss = wlan0-2'的行替換('///')爲'ignore_broadcast_ssid'。 – Cyrus

+0

這解釋得相當好:http://www.computerhope.com/unix/used.htm - 特別是關於「地址範圍」的部分 – rubo77