Grep и распечатать шаблон, а также распечатать предыдущую строку / шаблон - PullRequest
1 голос
/ 01 октября 2019

Мне нужно grep для IP-адреса, а затем найти определенную строку, которая предшествует IP-адресу, и напечатать только эту строку

Я запустил netsh и сохранил в SSID.txt

SSID.txt

SSID1:TESTWIFI_1
BSSID1:1.1.1.1

SSID2:TESTWIFI_2
BSSID1:2.2.2.2
BSSID2:3.3.3.3
BSSID3:4.4.4.4

Я хочу выполнить grep 4.4.4.4

grep '4.4.4.4' SSID.txt | cut -d: -f2-

И затем найти первый экземпляр SSID перед IP-адресом.

Я знаю, как напечатать определенное количество строк после использования grep, но я не хочу этого делать, потому что в каждом SSID есть несоответствующее количество BSSIDS

grep -A[] or -B [num] 

Желаемый вывод

4.4.4.4 - SSID2:TESTWIFI_2

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Другой подход: -

awk -v S="4.4.4.4" '/^SSID/{v=$0;next}$0~S{print S " - " v}' SSID.txt
0 голосов
/ 01 октября 2019

Не могли бы вы попробовать следующее, это должно быть легкой задачей для программы awk.

awk 'BEGIN{FS=":";OFS=" - "} /^SSID[0-9]/{val=$0;next} /4\.4\.4\.4/ && val{print $2,val}' Input_file

Добавление формы не-одного вкладыша кода выше:

awk '
BEGIN{
  FS=":"
  OFS=" - "
}
/^SSID[0-9]/{
  val=$0
  next
}
/4\.4\.4\.4/ && val{
  print $2,val
}
'  Input_file

Объяснение: Добавление пояснения к вышеуказанному коду.

awk '                       ##Starting awk program here.
BEGIN{                      ##Starting BEGIN section here for program.
  FS=":"                    ##Setting FS field separator as : colon here.
  OFS=" - "                 ##Setting output field separator as space - space for all lines.
}                           ##Closing BEGIN section of this program here.
/^SSID[0-9]/{               ##Checking condition if any line starts from SSIDand digit then do following.
  val=$0                    ##Creating variable val whose value is current line value.
  next                      ##next will skip all further statements from here.
}
/4\.4\.4\.4/ && val{        ##Checking condition if a line has 4.4.4.4 escaping DOT here to take it as literal character and checking condition if val is NOT NULL.
  print $2,val              ##Printing $2 of current line and variable val here.
}
'  Input_file               ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...