Awk для печати только соответствующего слова

Мне нужно создать скрипт, который будет создавать Makefile.

При проверке зависимостей я проверяю каждый .cpp-файл на свой заголовок «—. H». Я использую:

echo $(awk '/^".*h"$/ { print $0 }' $file) >> Makefile 

Каков наилучший способ просто получить часть «myheader.h», исключая «», очевидно. Могу ли я добиться этого с помощью awk? Предпочтительнее, чем проще, тем лучше. Я едва, на данный момент, понимаю awk.

ОБНОВИТЬ:

Следующее решение моей проблемы:

 awk -F '"' '/\.h"/ {print $2}' $file 

  • автоматическое удаление записей меню fluxbox
  • Как я могу поддерживать sudo в сценарии bash?
  • Скрипт с несколькими арифметическими условиями не работает
  • Awk печатает первые три папки в дереве каталогов, разделяя их /
  • Сценарий оболочки для разделения и перемещения пейзажных и портретных изображений
  • Как создать скрипт, который переключает одно значение в synclient?
  • Одинарные или двойные скобки и переносимость
  • Как разрешить имя хоста через nsswitch?
  • 3 Solutions collect form web for “Awk для печати только соответствующего слова”

    Почему awk ? для этого? grep -EPo '[^\s]+\.h[\s]' /path/to/src/*.cpp >> Makefile должен делать трюк.

    Опубликованный (и в настоящее время принятый) grep ответ имеет ряд проблем, не последним из которых является то, что будет напечатана любая строка, содержащая последовательность .h , а не только те, которые соответствуют регулярному выражению в сценарии Awk (например, , от ссылки на linkedlist.head структуры, такой как linkedlist.head ). Я бы использовал sed для этого:

     sed -n 's/^"\(.*h\)"$/\1/p "$file" >> Makefile 

    У меня есть сильное подозрение, что OP фактически не хочет сопоставлять любую строку, которая заканчивается буквой h в двойных кавычках, что и делает это регулярное выражение. Возможно, более разумное предположение было бы чем-то вроде

     sed -n 's/^ *# *include *"\([^"]*\.h\)".*$/\1/p < "$file" >> Makefile 

    #include с опциональными пробелами, прежде чем это будет образованным предположением. Говядина здесь представляет собой регулярное выражение [^"]*\.h которое захватывает строку, которая не содержит двойных кавычек и заканчивается буквальными символами .h .

    С awk вы можете использовать:

     awk -F '"' ' /^[[:blank:]]*#[[:blank:]]*include[[:blank:]]+".*\.h"/ { print $2 }' 

    Мы устанавливаем разделитель полей в " , соответствуют строкам, которые выглядят как

     #include "something.h" 

    И из них извлеките второе поле (так что между первым и вторым " ).

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