Поиск и замена (несколько строк) - PullRequest
0 голосов
/ 25 августа 2018

Привет, сообщество StackOverflow!

Я работаю над сценарием bash для изменения в Динамическом текстовом файле, я хочу заменить несколько строк одной строкой.

Ex:

Этот пример я хочу заменить ЭТОМ

CCCCC 
DDDDD

С KKKKK

Перед сценарием

AAAAA
CCCCC
DDDDD
BBBBB
CCCCC
DDDDD
CCCCC

После сценария

AAAAA
KKKKK
BBBBB
KKKKK
CCCCC

Я нашел скрипт для замены с помощью (sed), но он не заменяет несколько строк.

ПРИМЕЧАНИЕ: я новичок в написании сценариев, поэтому, пожалуйста, объясните, как это можно сделать легко:)

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы можете сделать это следующим образом

tr '\n' ' ' < yourText.txt | sed "s/CCCCC DDDDD/KKKKK/g" | tr -s ' ' '\n'

Чтобы сохранить его, просто добавьте > another.txt в конце вышеуказанной команды

0 голосов
/ 25 августа 2018

Выражение sed, которое вы ищете, выглядит примерно так:

sed -e '/CCCCC/{N;s/CCCCC\nDDDDD/KKKKK/}'

Что это делает?

Он дает команду sed выполнить блок команд, разделенный фигурными скобками, когда бы там ни былосоответствует регулярному выражению CCCCC (вы можете предпочесть заменить его на ^CCCCC$)

Когда выполняется вышеупомянутый блок, первое, что он делает, добавляет следующую строку в пространство шаблона.А затем он просто выполняет команду подстановки.

См. Также ответы на этот вопрос в сообществе UNIX & Linux StackExchange .

Обратите внимание команда more N; для добавления дополнительной строки в пространство шаблона.

Пример:

sed -e '/CCCCC/{N; N; s/CCCCC\nDDDDD\nBBBBB/KKKKK/}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...