Замена многострочного текста в файле с кавычками

Необходимо в файле найти по шаблону (регулярка) текст и заменить его на другой многострочный текст в котором присутствуют разные кавычки: ', ". Попробовал заменить через Perl, он ругается что там встречаются кавычки...

Исходный текст:

foo bar
text
baz quux

Текст, который хочется получить:

foo bar
line1
"line2"
'line3'
baz quux

Ответы (1 шт):

Автор решения: Ainar-G

Вы не привели примеров текста или вашего кода, так что я угадываю. Вот вариант с GNU sed:

$ sed -e 's/text/line 1\n"line2"\n'"'line3'"'/' -i -- ./txt.tmp.txt

Более переносимый (но и более уродливый) вариант с POSIX ed и POSIX printf:

printf '%%s/text/line1\\\n"line2"\\\n'"'line3'"'/\nwq\n' | ed -s -- ./txt.tmp.txt

Вариант с POSIX ed и POSIX more на несколько строк:

more <<-'EOF' | ed -s -- ./txt.tmp.txt
    %s/text/line1\
    "line2"\
    'line3'/
    wq
EOF

Все варианты заменяют text на:

line1
"line2"
'line3'
→ Ссылка