Как 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. Помогите!

  • использование xargs для grep нескольких шаблонов
  • Что делает grep, когда он не запускает CPU?
  • grep несколько строк, подсчет строк, эхо-выход для каждой строки
  • Удаление строк из шаблона в обратном порядке
  • Почему имена файлов трубопроводов в VIM прерываются, когда я возвращаюсь в оболочку?
  • Захват в переменных оболочки аргументов после команды (между скобками)
  • Grep, который показывает линию рисунка и соответствующую строку
  • Прикрепление файла в Unix для данной строки, а затем другой набор строк в этом файле и печать свойств файла тоже
  • 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] 
    Linux и Unix - лучшая ОС в мире.