Как grep не последовательные шаблоны

Как grep не последовательные шаблоны …

Я запускаю эту команду.

grep -B 1 -A 2 "field-2-value" inputFile.txt |grep -v "field-3" 

который дает эти 4 выхода.

   [Поле-1] ххх [/ поле-1] 
   [Поле-2] Поле-2-значение [/ поле-2] 
   [Поле-5] истинно [/ поле-5] 
   - 
   [Поле-1] YYY [/ поле-1] 
   [Поле-2] Поле-2-значение [/ поле-2] 
   [Поле-4] Поле-4-значение [/ поле-4] 
   - 
   [Поле-1] ZZZ [/ поле-1] 
   [Поле-2] Поле-2-значение [/ поле-2] 
   [Поле-5] ложно [/ поле-5] 
   - 
   [Поле-1] ттт [/ поле-1] 
   [Поле-2] Поле-2-значение [/ поле-2] 
   [Поле-4] Поле-4-значение [/ поле-4]

Меня интересуют только 2-й и последний результаты, которые имеют значения field-2 и field-4:

 
   [Поле-1] YYY [/ поле-1]
   [Поле-2] Поле-2-значение [/ поле-2]
   [Поле-4] Поле-4-значение [/ поле-4]

   [Поле-1] ттт [/ поле-1]
   [Поле-2] Поле-2-значение [/ поле-2]
   [Поле-4] Поле-4-значение [/ поле-4]

Файл inputFile.txt выглядит так:

 [RECORD id = "1"]
   [Поле-1] ххх [/ поле-1]
   [Поле-2] Поле-2-значение [/ поле-2]
   [Поле-3] Привет [/ поле-3]
   [Поле-5] истинно [/ поле-5]
 [/ ЗАПИСЬ]
 [RECORD id = "2"]
   [Поле-1] YYY [/ поле-1]
   [Поле-2] Поле-2-значение [/ поле-2]
   [Поле-3] Привет [/ поле-3]
   [Поле-4] Поле-4-значение [/ поле-4]
 [/ ЗАПИСЬ]
 [RECORD id = "3"]
   [Поле-1] ZZZ [/ поле-1]
   [Поле-2] Поле-2-значение [/ поле-2]
   [Поле-3] Привет [/ поле-3]
   [Поле-5] ложно [/ поле-5]
 [/ ЗАПИСЬ]
 [RECORD id = "4"]
   [Поле-1] ттт [/ поле-1]
   [Поле-2] Поле-2-значение [/ поле-2]
   [Поле-3] Привет [/ поле-3]
   [Поле-4] Поле-4-значение [/ поле-4]
 [/ ЗАПИСЬ]

Я почти соблазн написать сценарий оболочки для запуска двух наборов операций: Сначала создайте файл, который имеет эти выходы для каждого файла, который содержит эти результаты. А затем удалите блок строк, у которых нет поля-4. Помогите!

One Solution collect form web for “Как grep не последовательные шаблоны”

 sed -ne ' /field-2-value/!{h;d;} H;n;n;/field-4/!d;H;g;s/$/\n/p ' inputFile.txt 

Мы отвергаем все строки, которые не содержат / field-2 /, но сохраняют их в режиме удержания. (Остается только последний)

Поэтому, когда мы видим / field-2 / line, добавим его, чтобы удерживать, пропустить следующую строку, а затем проверить, содержит ли следующая строка следующая строка / field-4 /. Это мы не отбрасываем. OTW мы добавляем его для удержания, затем переносим трюм и печатаем его после добавления конечной новой строки, чтобы отделить печатные записи.


Результаты:

  [field-1]yyy[/field-1] [field-2]field-2-value[/field-2] [field-4]field-4-value[/field-4] [field-1]mmm[/field-1] [field-2]field-2-value[/field-2] [field-4]field-4-value[/field-4] 
  • Как группировать результаты grep?
  • Использование rpm / grep для проверки того, установлены ли несколько сервисов - как один вкладыш?
  • Значение звездочки (*) в grep
  • Можно ли вывести две конкретные вещи вывода?
  • Захват в переменных оболочки аргументов после команды (между скобками)
  • Использование grep и поиск уникальных вхождений
  • Эквивалент grep для awk или sed
  • Как я могу использовать grep для поиска файла для комбинаций строк?
  • Как проверить, имеет ли файл уже строку с содержимым?
  • Как отображать числа только в конце переменной в bash?
  • Заменить строку, содержащую символы новой строки
  • Использование модификаторов Perl-совместимого Regex (PCRE) в grep
  • Linux и Unix - лучшая ОС в мире.