匹配模式后仅打印下一行的一部分

时间:2019-01-04 09:32:15

标签: awk sed grep

我想在比赛后打印下一个句子
我的文件内容如下:

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

根据我的搜索,例如如果发现WIFI-3(SSID),则要打印1234ABCD。我使用此命令搜索SSID:

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

搜索之后,我要打印该特定匹配项的密码。

我正在使用Ubuntu 18.04

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

我想在比赛后打印下一行。

6 个答案:

答案 0 :(得分:1)

awk -F: '/WIFI-3/{getline;print $2; exit}' file

1234ABCD

答案 1 :(得分:1)

鲁棒性(由于部分匹配等原因而失败),并且惯用地:

$ awk -F':' 'f{print $2; exit} ($1=="SSID") && ($2=="WIFI-3"){f=1}' file
1234ABCD

答案 2 :(得分:1)

另一个awk

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

1234ABCD 

仅在下一行显示该值。

答案 3 :(得分:0)

由于代码标签已更改示例的外观,因此请立即添加。

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

答案 4 :(得分:0)

请尝试以下操作:

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

产生:

1234ABCD

答案 5 :(得分:0)

使用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
$