Если PATTERN2
может происходить несколько раз, это извлекает только внутренний текст:
sed '/PATTERN1/h;//!H;/PATTERN2/!d;//{x;/PATTERN1/!d}'
Если PATTERN2
может встречаться только один раз, вы можете использовать такой скрипт sed:
sed -n '/PATTERN1/h;//!H;/PATTERN2/{x;p}' input_file.txt
или:
sed '/PATTERN1/h;//!H;/PATTERN2/!d;//x'
Вы можете перевернуть строки, затем использовать sed
с 2 адресами и снова перевернуть строки:
tac input_file.txt | sed -n '/PATTERN2/,/PATTERN1/p' | tac
С помощью sed -z
мы можем удалить все в перед и после шаблонов, так как регулярное выражение является жадным:
sed -z 's/.*\(PATTERN1\n\)/\1/;s/\(PATTERN2\n\).*/\1/g'