重复替换字符串

重复替换字符串

当我执行命令时

sudo iwlist wlan0 scan  | grep ESSID

我得到结果:

ESSID:"DHS_3RD_FLOOR" ESSID:"MAXTA" ESSID:"MAXTA_5THWL" ESSID:"OPENSTACK" ESSID:"IOT" ESSID:"ved_opa" ESSID:"dlink" ESSID:"WifiFeazt"

但我希望输出为:(没有 ESSID:”)

DHS_3RD_FLOOR MAXTA MAXTA_5THWL OPENSTACK IOT ved_opa dlink WifiFeazt

我用谷歌搜索但我不知道该怎么做。

有什么建议吗?

答案1

使用 GNU sed

sed -r 's/(ESSID:|")//g'

或者

sed 's/\(ESSID:\|"\)//g'

或者

perl -pe 's/(?:ESSID:|")//g'

或者在纯 bash 中:

str=$(sudo iwlist wlan0 scan | grep ESSID)
str=${str//ESSID:/}
echo ${str//\"/}

输出:

DHS_3RD_FLOOR MAXTA MAXTA_5THWL OPENSTACK IOT ved_opa dlink WifiFeazt

答案2

在 awk 中,我会喜欢

$ .... | awk '{gsub(/ESSID:|"/,"")}1'
DHS_3RD_FLOOR MAXTA MAXTA_5THWL OPENSTACK IOT ved_opa dlink WifiFeazt

答案3

POSIXly:

sed -e 's/[^"]*"\([^"]*\)"/\1 /g'

答案4

使用 GNU grep

$ sudo iwlist wlan0 scan | grep -oP ':"\K[^"]+?(?=")'
DHS_3RD_FLOOR
MAXTA
MAXTA_5THWL
OPENSTACK
IOT
ved_opa
dlink
WifiFeazt

-o标志的意思是“仅打印该行的匹配部分”,当找到多个匹配项时,将打印所有匹配项。该-P使能PCRE这给了我们\K(“忽略与这里匹配的所有内容”)和前瞻。这些允许根据以下字符进行匹配,但不将所述字符包含在匹配本身中。所以,正则表达式的意思是“查找并丢弃它,然后匹配尽可能:"多的非,直到下一个”。""

要将所有内容放在一行上,请通过tr

$ sudo iwlist wlan0 scan | grep -oP ':"\K[^"]+?(?=")' | tr '\n' ' '
DHS_3RD_FLOOR MAXTA MAXTA_5THWL OPENSTACK IOT ved_opa dlink WifiFeazt $

或者,要获取尾随换行符:

$ echo $(sudo iwlist wlan0 scan | grep -oP ':"\K[^"]+?(?=")' | tr '\n' ' ')
DHS_3RD_FLOOR MAXTA MAXTA_5THWL OPENSTACK IOT ved_opa dlink WifiFeazt

相关内容