当我执行命令时
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