Sed заменить через предложение в несколько строк

Я новичок в использовании sed, но я экспериментировал с sed s/..../..../ (заменитель), чтобы изменить полное предложение, если оно в одной строке, но я не знаю альтернативного решения о том, как изменить предложение, которое могло быть разделено на две строки, такие как:

Это:

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

на самом деле написано так:

Lorem Ipsum is simply dummy text of the 
printing and typesetting industry.

Как вы можете обнаружить это или закодировать его, чтобы заменить весь предложение, даже если оно состоит из двух строк вместо одной?

11
задан 19 September 2013 в 02:59

3 ответа

Следующая команда будет работать в обеих ситуациях:

sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename

Дополнительные пояснения: Как использовать sed для замены многострочной строки?

0
ответ дан 19 September 2013 в 02:59

Хотя sed может сопоставлять шаблоны на нескольких строках (используя команды N или H для добавления последовательных строк перед сопоставлением), это далеко за пределами его зоны комфорта. Попытайтесь, только если вы любите боль.

1110 Perl умеет хорошо делать такие вещи. Используйте переключатель -p , чтобы он обрабатывал стандартный ввод по одной записи за один раз, и печатайте измененную запись (по типу sed) и -000 для включения режима абзаца где записи разделены пустыми строками). В регулярном выражении \s соответствует любому пробелу, включая символ новой строки.

perl -p -000 -e 's/Lorem\s+Ipsum\s+is\s+simply\s+dummy\s+text\s+of\s+the\s+printing\s+and\s+typesetting\s+industry\./Replacement text/g'

Если вы хотите поместить новую строку в тексте замены, когда оригинал содержит его, это более сложно. Как это сделать, зависит от ваших требований относительно того, куда поместить новую строку.

0
ответ дан 19 September 2013 в 02:59

sed не может легко читать несколько строк. Используйте вместо этого perl -i -0pe 's/.../.../...'.

0
ответ дан 19 September 2013 в 02:59

Другие вопросы по тегам:

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