Как извлечь строки в кавычках, используя perl / awk? - PullRequest
1 голос
/ 21 июля 2010

У меня есть файл с двумя строками, имеющими пару ключей и значений в каждой строке.«//» используется в качестве стиля комментария.

1. key = "string_key_value" //string key

Как извлечь string_key_value без кавычек?

2. key =100 //integer value

Как извлечь отсюда 100 как целое число?

Я должен повторно использовать эти значения в другой команде Unix.

Ответы [ 4 ]

1 голос
/ 21 июля 2010

Попробуйте это:

perl -wlne'print $1 if /key\s*=\s*\"?([^\"; ]+)[\" ;]/' source.cpp

Он вытаскивает все после key = и перед закрывающей кавычкой / пробелом / точкой с запятой. если у вас есть строки с экранированными кавычками, это не удастся, поэтому его следует использовать, только если вам нужно быстрое и грязное решение. Если вы анализируете производственные данные, файлы журналов и т. Д., Вы должны использовать модуль из семейства Parse:: на CPAN, а не использовать регулярные выражения.

Я должен повторно использовать эти значения в другой команде Unix.

Возможно, вам следует определять эти значения в центральном месте (например, в файле констант или в файле конфигурации), а не пытаться анализировать исходный код ... это будет гораздо менее подвержено ошибкам (не говоря уже о хакерстве).

0 голосов
/ 21 июля 2010

если у вас просто есть пары ключ = значение, просто используйте awk's gsub(), чтобы удалить кавычки

$ echo 'key = "string_key_value"' | awk '{gsub("\042","",$NF);print $NF}'
string_key_value

Или если просто использовать оболочку (bash)

$ string='key = "string_key_value"'
$ IFS="="
$ eval echo \$$#
 "string_key_value"
$ result=$(eval echo \$$#)
$ echo $result
 "string_key_value"
$ echo ${result//\"}
 string_key_value
0 голосов
/ 21 июля 2010

Мне кажется, что вы пытаетесь разобрать пары ключ / значение, а затем вам нужно посмотреть ответы на этот вопрос StackOverflow Регулярное выражение для разбора пар имя-значение

или попробоватьрешения по следующим ссылкам:

или просто разделите каждую строку на '=' и очистите кавычки.

0 голосов
/ 21 июля 2010

Вы можете посмотреть " подробности синтаксического анализа цитируемых конструкций ". perldoc твой друг.

Редактировать: Извините, я не думаю, что это то, что вы ищете. Это все еще стоит прочитать, поэтому я оставлю это там.

Это должно быть ближе к тому, что вы хотите:

my ($key, $value) = $line =~ /(\S+)\s*=\s*"?(.*)"?/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...