Сед заменяет предложение на несколько строк

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

Это:

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

на самом деле написано следующим образом:

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

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

1
задан 19 September 2013 в 03:59

2 ответа

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

Perl может делать такие вещи красиво. Используйте переключатель -p, чтобы он обрабатывал стандартный ввод по одной записи за раз и печатал измененную запись (à la 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'

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

12
ответ дан 24 May 2018 в 17:50
  • 1
    @terdon Ах, я хотел разрешить несколько пробелов, но забыл. Спасибо, исправлено. – Gilles 19 September 2013 в 03:55
  • 2
    Вопрос о sed. Он также помечен sed, а не perl. – Radu Rădeanu 19 September 2013 в 13:25

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

0
ответ дан 24 May 2018 в 17:50
  • 1
    sed может читать через несколько строк! – Radu Rădeanu 19 September 2013 в 03:31
  • 2
    @ RaduRădeanu Технически, да. Но это редко стоит проблемы. – Gilles 19 September 2013 в 03:46
  • 3
    @Gilles Если использование perl более просто для вас, это не означает, что sed редко стоит проблемы. – Radu Rădeanu 19 September 2013 в 13:19

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

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