Извлечь Specifi c слово из текстового файла между Specif c слов в BASH - PullRequest
1 голос
/ 25 апреля 2020
VAR="10.101.10.5"

У меня есть текстовый файл ab c .txt в следующем формате:

Name : www.ayz.com  { Destination : 10.101.10.2  tcpmask        members {     10.101.10.5 :http { address 10.101.10.5 }  10.101.10.3 :http { address 10.101.10.3 } } 

Name : www.abc.com   { Destination : 10.101.10.5  tcpmask        members {     10.101.10.5 :http { address 10.101.10.5 }  10.101.10.3 :http { address 10.101.10.3 } } 

Требуется, когда я grep для определенного c IP, например 10.101.10.5. Он должен искать только строку, которая имеет IP 10.101.10.5 после слова Destination и перед словом members.

Поэтому в основном мне нужна команда, которая просто перечисляет вторую строку только тогда, когда я grep для 10.101.10.5 , он не должен возвращать первую строку, потому что у него есть IP после членов.

Я пытался использовать sed, но это не помогает:

sed -n '/destination : $VAR /,/<members>/p' /abc.txt

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Используйте двойные квоты и имя переменной. Вы также можете использовать некоторые регулярные выражения, например grep "Destination \ s *: \ s * $ VAR" , чтобы быть более гибкими для дополнительных пробелов после Destination

$ VAR="10.101.10.5"
$ grep "Destination : $VAR" file.txt
Name : www.abc.com   { Destination : 10.101.10.5  tcpmask        members {     10.101.10.5 :http { address 10.101.10.5 }  10.101.10.3 :http { address 10.101.10.3 } }
1 голос
/ 25 апреля 2020

Я предлагаю:

grep 'Destination .* 10\.101\.10\.5 .* members' abc.txt

Обновление:

grep "Destination .* ${VAR//./\\.} .* members" abc.txt

См .: Разница между одинарными и двойными кавычками в bash

...