Я понимаю, что этому вопросу уже несколько лет, но текущая версия Fedora (28 )прекрасно устанавливается из коробки и может использоваться с минимальной настройкой.
Использование сопоставления регулярных выражений 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