LINUX.ORG.RU

SED

 ,


0

2

Можно ли на sed одной командой решить такую задачу вставки строки в файл. Вставить надо непосредственно перед строкой, заданной regexp2, но строка найденная по regexp2, должна располагаться после строки, соответствующей regexp1:

...
111 <- regexp1
...
...
<- вставить сюда
444 <- regexp2

Премного благодарен за идеи!

У sed'а не команды, а однострочные скрипты. Там можно делать блоки команды, проверки, переходы...

В вашем случае, первый цикл работает пока не встретится regexp1, потом второй цикл, пока не встретися regexp2, потом третий — просто печатать остаток ввода.

echo -e «123\nada\ndddd\nttt\nyyy» | sed -n -e '/ada/!{p;d}' -e ':b /ttt/!{p;n;bb}; i eeee' -e ':d p;n;bd'

mky ★★★★★
()

как-то так

/regexp1/ {
    :a
    /regexp2/! { N; ba }
    s/^\(.*\n\)\(.*\)$/\1вставил\n\2/ 
}

salsa
()
Ответ на: комментарий от mky

Спасибо

Спасибо за толковое объяснение и хороший пример! Помогло.

sokolpeter
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.