Попробуйте это:
perl -wlne'print $1 if /key\s*=\s*\"?([^\"; ]+)[\" ;]/' source.cpp
Он вытаскивает все после key =
и перед закрывающей кавычкой / пробелом / точкой с запятой. если у вас есть строки с экранированными кавычками, это не удастся, поэтому его следует использовать, только если вам нужно быстрое и грязное решение. Если вы анализируете производственные данные, файлы журналов и т. Д., Вы должны использовать модуль из семейства Parse::
на CPAN, а не использовать регулярные выражения.
Я должен повторно использовать эти значения в другой команде Unix.
Возможно, вам следует определять эти значения в центральном месте (например, в файле констант или в файле конфигурации), а не пытаться анализировать исходный код ... это будет гораздо менее подвержено ошибкам (не говоря уже о хакерстве).