Хотя многие программы не очень длинны в качестве входных данных, когда ваши данные не огромны, вы часто можете упростить многострочное сопоставление, сначала манипулируя данными, чтобы поместить все в одну строку, выполнив совпадение, а затем восстановив новые строки.
Например, используйте tr для замены newline \n каким-либо символом, который не указан в ваших данных (я использовал возврат-возврат `\ r '), используйте sed для изменения этой отдельной строки, затем tr символ назад :
tr '\n' '\r' < file |
sed 's/\("[^"]*"\).*/\1/' |
( tr '\r' '\n'; echo ) # add a final newline
В противном случае, если вы заявляете, что хотите sed / awk / grep, языки, такие как perl и python, используют аналогичные регулярные выражения, как эти, и подходят для управления многострочными строками. Например, perl:
perl -e '$_ = join("",<>); s/(".*?").*/$1/s; print "$_\n"; ' file