현재 내 주변의 무선 네트워크에 대한 일부 정보를 출력하는 다음과 같은 코드가 있습니다.
sudo iw wlan0 scan | sed -nr '/SSID: |signal: |primary channel: /p' | sed 's/^[\t]*//g' | sed 's/^SSID: //' | sed 's/signal: / * signal: /'
(코드가 너무 길거나 헷갈리더라도 양해 부탁드립니다.) 출력은 대략 다음과 같습니다.
* signal: -61.00 dBm
<network 1 name>
* primary channel: 10
* signal: -37.00 dBm
<network 2 name>
* primary channel: 1
* signal: -80.00 dBm
<network 3 name>
* primary channel: 11
* signal: -90.00 dBm
<network 4 name>
* primary channel: 11
iw wlan0 scan
그러나 명령의 원시 형식 으로 인해 각 네트워크의 신호 강도가 실제 네트워크 이름 앞에 인쇄됩니다. 내가 원하는 결과는 다음과 같습니다.
<network 1 name>
* signal: -61.00 dBm
* primary channel: 10
<network 2 name>
* signal: -37.00 dBm
* primary channel: 1
<network 3 name>
* signal: -80.00 dBm
* primary channel: 11
<network 4 name>
* signal: -90.00 dBm
* primary channel: 11
이 결과를 어떻게 얻을 수 있습니까? 어떻게든 패턴을 검색 * signal:
한 후 해당 줄을 다음 줄로 바꿀 수 있을 것 같지만 이를 수행하는 방법을 모르겠습니다.
(가능하다면 다른 명령처럼 내 명령 끝에 추가할 수 있는 것을 원합니다 sed
. 그렇지 않으면 bash의 모든 솔루션이 열려 있습니다)
<network # name>
편집: 위에서 이것은 내 주변의 네트워크에서 일부 이름을 제거하고 거기에 있을 실제 네트워크 이름을 나타내는 것이라고 말했습니다 . 기본적으로 네트워크 이름이 있는 줄에는 네트워크 이름만 포함되며 "<" 또는 ">" 등은 포함되지 않습니다.
답변1
GNU sed를 사용하여 이것을 시도해 보세요:
sed -ne '/signal:/{h;b};/^[^ ]/{p;x};p' file
바라보다:man sed
답변2
iw --help
출력의 마지막 줄을 실행하고 읽는 것이 좋습니다 .
그 외에는 이러한 파이프 없이도 단일 sed
호출을 사용할 수 있다고 생각합니다.
iw wlan0 scan | sed -n '/signal:/{s/^[[:blank:]]*/ * /;h}
/^[[:blank:]]*SSID: /{s///;G;p};/primary/{s/^[[:blank:]]*/ /;p}'
즉:
/signal:/{s/^[[:blank:]]*/ * /;h}
- signal
라인을 포맷하고 h
이전 공간을 복사합니다. - 라인을
/^[[:blank:]]*SSID: /{s///;G;p}
포맷하고 , 예약된 공간부터 패턴 공간까지 라인을 추가하여 인쇄합니다. - 라인을 포맷 하고 인쇄합니다.SSID
G
/primary/{s/^[[:blank:]]*/ /;p}
primary
p
답변3
내 컴퓨터에서 하는건데..
sudo iw wlp0s18f2u1 scan |
sed -Ee:n -e'$!N;/^.sig/!D' \
-e'/\* pri/s/.([^\t]*\t).*(SSID:[^\t]*\t).*p/\2\1p/;t' \
-ebn
...얻은 결과는 다음과 같습니다...
SSID: ATT477A7i6
signal: -61.00 dBm
primary channel: 6
SSID: ATT5K5I6b4
signal: -65.00 dBm
primary channel: 6
SSID: ATT960
signal: -75.00 dBm
primary channel: 6
SSID: Bernardo Shores WiFi 4
signal: -77.00 dBm
primary channel: 6
GNU와 함께 작동합니다 sed
. 보다 이식 가능한 버전은 다음과 같습니다.
( t=$(printf \\t) nt=[\^$t]*$t
sudo iw wlp0s18f2u1 scan |
sed -e:n -e'$!N;/^.sig/!D' \
-e"/* pri/s/.\($nt\).*\(SSID:$nt\).*p/\2\1p/;t" \
-ebn
)