Почему использование подстановки строк для формирования регулярного выражения не работает? - PullRequest
3 голосов
/ 28 февраля 2012

У меня есть регулярное выражение для использования с awk, чтобы найти любое из указанных слов в строке файла. Похоже, это awk "/word1/||/word2/||/word3/" filename. В качестве альтернативы я пытался указать слова вроде этого WORDS="word1 word2 word3", а затем использовать подстановку строки bash, чтобы сформировать регулярное выражение для передачи в awk.

Я пробовал множество способов сделать это безрезультатно. awk просто выводит содержимое всего файла или выдает какую-то жалобу на форму регулярного выражения.

Вот что у меня есть:

#!/bin/bash

FILE="myfile"
WORDS="word1 word2 word3"

# use BASH string substitution to obtain the regex which should look like this:
# "/word1/||/word2/||/word3/"

REGEX=\"/${WORDS// //||/}/\"

awk ${REGEX} $FILE

Я вполне уверен, что это связано с кавычками, и я пробовал различные методы, используя echo и back ticks, и могу получить его look right (когда отражено), но когда на самом деле пытаюсь его использовать, это терпит неудачу.

1 Ответ

3 голосов
/ 28 февраля 2012

Попробуйте заменить:

REGEX=\"/${WORDS// //||/}/\"

на:

REGEX="/${WORDS// //||/}/"

Обратите внимание, что нет необходимости экранировать двойные кавычки, поскольку они на самом деле не являются частью регулярного выражения.

...