Можно ли использовать grep lookaroud несколько раз?

<table name="content_analyzer" another-key="id9"> <type="global" /> </table> <table name="content_analyzer2" another-key="id12"> <type="global" /> </table> <table name="content_analyzer" primary-key="id9"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id12"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id56"> <type="global" /> </table> 

если я хочу извлечь значение имени, тогда:

 grep -Po 'name="\K.*?(?=")' 

но как это сделать для значения имени и первичного ключа одновременно? Например, нижняя строка не работает.

 grep -Po 'name="\K.*?(?=") primary-key="\K.*?(?=")' 

так что это выглядит

 content_analyzer id9 content_analyzer2 id12 content_analyzer_items id56 

3 Solutions collect form web for “Можно ли использовать grep lookaroud несколько раз?”

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

 $ sed -nr 's/^[^\s]+\sname="([^"]+)"\s.*primary-key="([^"]+)">$/\1 \2/p' file.txt content_analyzer id9 content_analyzer2 id12 content_analyzer_items id56 

Используя grep с помощью PCRE, вы можете получить:

 $ grep -Po '(name|primary-key)="\K[^"]+' file.txt content_analyzer id9 content_analyzer2 id12 content_analyzer_items id56 

Вы можете сделать это с помощью awk :

 $ awk '{for(i=1; i<=NF; i++){if($i~/^name=/ || $i~/^primary-key=/){print $i}}}' 

Результат:

 name="content_analyzer" name="content_analyzer2" name="content_analyzer" primary-key="id9"> name="content_analyzer2" primary-key="id12"> name="content_analyzer_items" primary-key="id56"> 

awk будет искать name= или primary-key= и распечатать значение этого поля.

Вы не можете использовать lookaround regexp для выбора нескольких частей линии, как предполагалось.

Однако, поскольку вы используете синтаксис perl, возможно, perl сам по себе является лучшим выбором:

 $ perl -ne 'print if s/.*name="(.*?)".*primary-key="(.*?)".*/\1 \2/' file content_analyzer id9 content_analyzer2 id12 content_analyzer_items id56 

Это не использует никакой конструкцию поиска и самоочевидно.

  • Как найти все файлы .tex в каталогах в Recurse Grep?
  • Awk / bash Keep line containg только 3 поля
  • подсчет вхождений строки
  • Как я могу grep для строки, содержащей метасимволы регулярных выражений, такие как $ и?
  • Добавить что-то в каждый список в файле
  • Добавить информацию из .dat в CSV-файл
  • Захват в переменных оболочки аргументов после команды (между скобками)
  • поиск и замена с помощью grep (not sed)
  • grep неправильно читает шаблон из переменной
  • отображать пользователей, которые вошли в систему с даты, используя последние
  • Как grep наиболее часто встречающиеся сообщения об ошибках в файле журнала unix
  • Использовать grep с или
  • Linux и Unix - лучшая ОС в мире.