使用sed替换某个块中的一个事件

时间:2016-08-03 13:10:04

标签: sed

我想将ignore_broadcast_ssid=1替换为ignore_broadcast_ssid=0
在文件/var/run/hostapd-phy0.conf内。

这是我的第一个猜测:

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
...

2 个答案:

答案 0 :(得分:1)

您可以先找出第一个文本的行号作为起始搜索索引:

grep -n "bss=wlan0-2"

假设它在第10行。然后在下面应用你的sed命令:

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

确保在命令末尾没有关键字g,因为它表示全局替换匹配的模式。

答案 1 :(得分:1)

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