Я новичок в использовании 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.
Как вы можете обнаружить это или закодировать его, чтобы заменить весь предложение, даже если оно состоит из двух строк вместо одной?
Следующая команда будет работать в обеих ситуациях:
sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename
Дополнительные пояснения: Как использовать sed для замены многострочной строки?
Хотя sed может сопоставлять шаблоны на нескольких строках (используя команды N
или H
для добавления последовательных строк перед сопоставлением), это далеко за пределами его зоны комфорта. Попытайтесь, только если вы любите боль.
-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'
Если вы хотите поместить новую строку в тексте замены, когда оригинал содержит его, это более сложно. Как это сделать, зависит от ваших требований относительно того, куда поместить новую строку.
sed не может легко читать несколько строк. Используйте вместо этого perl -i -0pe 's/.../.../...'
.