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

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

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

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

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

ОБНОВИТЬ:

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

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

  • Баш читал с разделителем прошлых строк
  • считывать ввод от пользователя во время цикла, имеющего перенаправление ввода и вывода
  • Использование переменной даты с помощью wget -post-data
  • Как объединить три файла (и пропустить первую строку одного файла) отправить его в качестве вкладов в мою программу?
  • преимущества жесткой ссылки файла над копией файла
  • определить, существуют ли IP-адреса в списке A в списке диапазонов IP в списке B
  • Как определить переменную оболочки равной версии Vim, установленной на данный момент?
  • Вы предпочитаете скрипты bash или псевдонимы для ярлыков?
  • 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 - лучшая ОС в мире.