Grep регулярное выражение содержится в файле (не опция grep -f!) - PullRequest
0 голосов
/ 16 декабря 2011

Я читаю выходные данные конфигурации оборудования и проверяю правильность конфигурации в соответствии с конфигурацией HW.Конфигурации шаблона хранятся в виде файлов со всеми параметрами, а строки содержат регулярные выражения (в основном только для учета переменного числа пробелов между «объектом», «параметром» и «значением» в выходных данных, а также некоторой дисперсией индекса)

Прежде всего, я не могу использовать grep -f $template $output, так как мне приходится обрабатывать каждую строку шаблона отдельно.У меня есть что-то вроде этого работает

while read line
  do
  attempt=`grep -E "$line" $file`
  # ...etc
  done < $template

, который прекрасно работает, если шаблон не содержит регулярных выражений. Проблема: grep интерпретирует опцию поиска буквально, когда они читают файл формы. Я протестировал сами регулярные выражения, они отлично работают из командной строки.1011 *

Как читать регулярные выражения из файла (строка за строкой), и чтобы grep не интерпретировал их буквально?

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

Используя следующий скрипт:

#!/usr/bin/env bash
# multi-grep
regexes="$1"
file="$2"
while IFS= read -r rx ; do
    result="$(grep -E "$rx" "$file")"
    grep -q -E "$rx" "$file" && printf 'Look ma, a match: %s!\n' "$result"
done < "$regexes"

И файлы со следующим содержанием:

$ cat regexes
RbsLocalCell=S.C1.+eulMaxOwnUuLoad.+100

$ cat data
RbsLocalCell=S1C1 eulMaxOwnUuLoad 100

Я получаю этот результат:

$ ./multi-grep regexes data
Look ma, a match: RbsLocalCell=S1C1 eulMaxOwnUuLoad 100!

Это работает длятакже различный интервал

$ cat data
RbsLocalCell=S1C1    eulMaxOwnUuLoad           100

$ ./multi-grep regexes data
Look ma, a match: RbsLocalCell=S1C1    eulMaxOwnUuLoad           100!

Кажется, мне хорошо.

1 голос
/ 16 декабря 2011

Используйте параметр -F или fgrep.

Более того, вы, похоже, хотите сопоставить полные строки: добавьте также параметр -x.

0 голосов
/ 16 декабря 2011

Еще один момент: убедитесь, что оболочка неправильно интерпретирует шаблон, поместив "$line" в кавычки.

В целом, похоже, что вы пишете Perl лучше, чем сценарий оболочки.

...