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

  • Прочитайте файл и прокомментируйте строку, соответствующую строке, с помощью сценария оболочки
  • grep searchstring / etc / crontab странное поведение в скрипте BASH
  • Греп на одной линии
  • solaris + fit egrep для solaris
  • grep, чтобы найти слова со всеми гласными
  • Странное поведение «ls -a | grep ^ \. "
  • Запуск find & grep и включение пути в выходной файл
  • Ускорение работы zgrep на многоядерном компьютере
  • 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 - лучшая ОС в мире.