Как получить все совпадения из регулярных выражений? - PullRequest
7 голосов
/ 13 марта 2009

Я хотел бы получить все экземпляры [0-9A-Z]+? для последующей обработки. У меня есть

if [[ `cat file` =~ '[0-9A-Z]+?' ]]; then
  echo $BASH_REMATCH;
fi

Что дает мне первое совпадение, но как я могу обработать все совпадения в файле?

Спасибо

1 Ответ

6 голосов
/ 13 марта 2009

Если вы хотите получить только соответствующий текст регулярного выражения, я бы использовал

grep -o 'regex' file

В духе вашего кода я бы изменил его на

while read line; do
    [[ $line =~ regex ]] || continue
    # do somethinw with $line or $BASH_REMATCH, perhaps put it in an array.
done < file

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

while read line; do
    # do somethinw with $line
done < <(grep -o 'regex' file)

Я предполагаю, что ваше регулярное выражение должно быть упрощенным примером того, что вы действительно делаете. ? не поможет, и ваши кавычки совпадают с литеральной строкой.

...