Сопоставьте несколько регулярных выражений из одного файла с помощью awk

Я пытаюсь проанализировать HTML-файл с использованием сценариев оболочки.

Существует 4 разных регулярных выражения, которые мне нужно уловить: name= , age= , class= , marks= .

С помощью

 grep "name=\|age=\|class=\|marks=" student.txt 

Я могу получить нужные строки, но вместе с этими соответствующими строками мне также нужно распечатать вторую строку из каждого матча, содержащего оценку.

Обратившись к вопросу: Print Matching line и nth line из согласованной строки .

Я изменил код на:

 awk '/name=\|age=\|class=\|marks=/{nr[NR]; nr[NR+2]}; NR in nr' student.txt 

Но это, похоже, не работает. Как искать несколько регулярных выражений в одной команде awk ?

  • Проблема с передачей параметров, содержащих пробелы и символы wild card
  • shell stderr to / dev / null
  • эхо-цветной текст, который динамически меняет цвета
  • case + как реализовать равный или меньше или больше в случае синтаксиса
  • Получение возвратов Nagios из скрипта через NRPE
  • сумма всех пакетов в файлах pcap
  • Как обнаружить, что выполняется менее чем x процессов
  • Запуск программы с / sbin / runningcript в /etc/init.d без создания осиротевшего процесса
  • 4 Solutions collect form web for “Сопоставьте несколько регулярных выражений из одного файла с помощью awk”

    Попробуйте:

     awk '/foo/||/bar/' Input.txt 

    awk regexps – это расширенные регулярные выражения, а grep без -E – это основное регулярное выражение. С расширенным регулярным выражением:

     awk '/name=|age=|class=|marks=/{nr[NR]; nr[NR+2]}; NR in nr' 

    Обратите внимание, что стандартное основное регулярное выражение не имеет оператора чередования, поэтому

     grep 'a\|b' 

    Как правило, это не работает в каждом grep (хотя некоторые из них, как GNU grep поддерживают его как расширение).

     grep -E 'a|b' grep -ea -eb grep 'a b' 

    Однако будет работать в каждом grep .

    Вы пытались использовать флаг «-A» с grep? После матча он будет печатать строки конечного контекста. Например: grep -A1 foo file.txt будет сопоставлять и печатать строки со словом foo, а также печатать строку, следующую за ней.

    Использование grep

    Что делать, если вы использовали контекстный переключатель в grep ( -A ) и задали 1 чтобы получить первую строку после совпадения?

     $ grep -E -A 1 "name=|age=|class=|marks=" student.txt 

    пример

    Пример файла.

     $ cat student.txt name= 1st line after name 2nd line after name age= 1st line after age 2nd line after age class= 1st line after class 2nd line after class marks= 1st line after marks 2nd line after marks 

    Затем, когда вы выполните приведенную выше команду:

     $ grep -E -A 1 "name=|age=|class=|marks=" student.txt name= 1st line after name -- age= 1st line after age -- class= 1st line after class -- marks= 1st line after marks 

    Использование awk

    Поскольку @RahulPatil предложил использовать конструкцию для awk :

     '/string1/||/string2/||...' 

    Что-то вроде этого сделает то, что вы ищете.

     $ awk ' /name=/||/age=/||/class=/||/marks=/{nr[NR]; nr[NR+1]}; NR in nr ' student.txt 

    пример

     $ awk ' /name=/||/age=/||/class=/||/marks=/{nr[NR]; nr[NR+1]}; NR in nr ' student.txt name= 1st line after name age= 1st line after age class= 1st line after class marks= 1st line after marks 
    Interesting Posts

    Почему фоновые процессы иногда останавливаются спонтанно?

    e- и f-версии команд

    «Inode_size (128) * inodes_count (0) слишком большой для файловой системы с 0 блоками» при создании файловой системы

    Когда была установлена ​​эта уязвимость в Debian? (CVE-2012-2088, затрагивающий libtiff4)

    iptables предотвращает соединение через ssh после изменения порта, несмотря на правило ACCEPT

    Создание программы в корзине

    Является ли `UDIF чтение / запись изображения 'загрузочным на не-Apple аппаратных?

    Как изменить внешний вид приложений, запущенных через NoMachine?

    Как использовать инструмент diff, чтобы получить разницу между каталогами с библиотеками и источником?

    Smbclient запрашивает пароль

    Ключ управления питанием для запуска * X11 * скриптов при пробуждении

    Аппаратное ускорение на интегрированной графике Intel 5500 и Debian приводит к нестабильной системе

    Скажите сетевому менеджеру приостановить действие

    выяснить удаленные IP-адреса всех компьютеров?

    Строка печати содержит максимальное и минимальное значение

    Linux и Unix - лучшая ОС в мире.