для каждого соответствия регулярному выражению в bash

Я понимаю, что этому вопросу уже несколько лет, но текущая версия Fedora (28 )прекрасно устанавливается из коробки и может использоваться с минимальной настройкой.

0
11.05.2020, 03:56
1 ответ

Использование сопоставления регулярных выражений bash при условии, что не существует многострочного эквивалента якорей ^и $в bash:

x=$(<foo.log)

printf -v re 'START_OF_ENTRY\nline2\nEND_OF_ENTRY'

while [[ $x =~ $re ]]; do 
  printf 'match: %s\n' "${BASH_REMATCH[0]}"; x=${x#*${BASH_REMATCH[0]}};
done
match: START_OF_ENTRY
line2
END_OF_ENTRY
match: START_OF_ENTRY
line2
END_OF_ENTRY

С Perl, в котором вы можете использовать модификатор m, чтобы сделать ^и $значимыми в многострочном контексте:

perl -0777 -nE 'while ($_ =~ /^(START_OF_ENTRY\nline2\nEND_OF_ENTRY)$/mg) {say "match: $1"}' foo.log
0
28.04.2021, 23:15

Теги

Похожие вопросы