私がコマンドを実行すると
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
Googleをやってみましたが、どうすればいいのかわかりません。
どんな提案がありますか?
答え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
POSIX的に:
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
(「これと一致するものを無視します」)期待される。これは、次の文字に基づいて一致を許可しますが、その文字を一致自体に含めません。したがって、正規表現は「それを見つけてしまい、:"
次の項目までできるだけ多くの非項目を一致させる」ことを意味します。"
"
すべてを1行に入れるには、以下を渡します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