Печать только части следующей строки после сопоставления с шаблоном - PullRequest
0 голосов
/ 04 января 2019

Я хочу напечатать следующее предложение после совпадения
Содержимое моего файла выглядит следующим образом:

SSID:CoreFragment
Passphrase:WiFi1234
SSID:CoreFragment_5G
Passphrase:WiFi1234
SSID:Aleph_inCar
Passphrase:1234567890

Согласно моему поиску, например, если я нашел WIFI-3(SSID) than, я хочу напечатать 1234ABCD,Я использовал эту команду для поиска SSID:

grep -oP '^SSID:\K.+' file_name 

После этого поиска я хочу напечатать фразу-пароль этого конкретного соответствия.

Я работаю в Ubuntu 18.04

<b>ssid</b>=$(grep -oP &apos;^SSID:\K.+&apos; list_wifi.txt)
for ssid in $(sudo iwlist wlp2s0 scan | grep ESSID | cut -d &apos;"&apos; -f2)
do
    if [ $ssid == $ssid_name ]; then
       echo "SSID found...";
    fi
done

Я хочу напечатать следующую строку после матча.

Ответы [ 6 ]

0 голосов
/ 05 января 2019

еще awk

$ awk -F: -v s="$ssid" '$0=="SSID:"s{c=NR+1} c==NR{print $2; exit}' file

1234ABCD 

будет печатать только значение, если оно находится на следующей строке.

0 голосов
/ 04 января 2019

Надежно (не выйдет из строя из-за частичных совпадений и т. Д.) И идиоматически:

$ awk -F':' 'f{print $2; exit} ($1=="SSID") && ($2=="WIFI-3"){f=1}' file
1234ABCD
0 голосов
/ 04 января 2019
awk -F: '/WIFI-3/{getline;print $2; exit}' file

1234ABCD
0 голосов
/ 04 января 2019

Использование Perl

$ export ssid="WIFI-3"
$ perl -0777 -lne ' /SSID:$ENV{ssid}\s*Passphrase:(\S+)/ and print $1 ' yash.txt
1234ABCD
$ export ssid="Aleph_inCar"
$ perl -0777 -lne ' /SSID:$ENV{ssid}\s*Passphrase:(\S+)/ and print $1 ' yash.txt
1234567890
$

$ cat yash.txt
SSID:CoreFragment
Passphrase:WiFi1234
SSID:CoreFragment_5G
Passphrase:WiFi1234
SSID:Aleph_inCar
Passphrase:1234567890
SSID:WIFI-1
Passphrase:1234ABCD
SSID:WIFI-2
Passphrase:123456789
SSID:WIFI-3
Passphrase:1234ABCD

Вы можете записать его в переменные как

$ passphrase=$(perl -0777 -lne ' /SSID:$ENV{ssid}\s*Passphrase:(\S+)/ and print $1 ' yash.txt)
$ echo $passphrase
1234567890
$
0 голосов
/ 04 января 2019

Пожалуйста, попробуйте следующее:

ssid="WIFI-3"
passphrase=$(grep -A 1 "^SSID:$ssid" file_name | tail -n 1 | cut -d: -f2)
echo "$passphrase"

, что дает:

1234ABCD
0 голосов
/ 04 января 2019

Поскольку теги кода изменили внешний вид образцов, добавьте их сейчас.

var=$(awk '/SSID:[a-zA-Z]+-[0-9]+/{flag=1;next} flag{sub(/.*:/,"");value=$0;flag=""} END{print value}' Input_file)
echo "$var"


Не могли бы вы попробовать следующее.

awk '/Passphrase/ && match($0,/WIFI-3 Passphrase:[0-9a-zA-Z]+/){val=substr($0,RSTART,RLENGTH);sub(/.*:/,"",val);print val;val=""}'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...