문자열 교체 반복

문자열 교체 반복

내가 명령을 실행할 때

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

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플래그는 "줄에서 일치하는 부분만 인쇄"를 의미하며, 일치하는 항목이 여러 개 발견되면 모든 일치 항목이 인쇄됩니다. 활성화-PPCRE이는 우리에게 \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

관련 정보