文字列置換の繰り返し

文字列置換の繰り返し

私がコマンドを実行すると

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

関連情報