Подставка Sed с 3 линиями раздвижных окон

Мне нужно реализовать трехстрочное скользящее окно с Sed, чтобы изменить любое возникновение трех следующих сгруппированных строк в большом текстовом файле:

Fax: 05.11.22.33.44<LF> <LF> <LF> 

с этим :

 Fax: 05.11.22.33.44<LF> ### <LF> 

Я попытался сделать это со следующей командной строкой (sed работает в пакетном файле msdos, но он не работает также под моим Linux-bash):

 sed -i ":a;$!N;s/\nFax: \([ 0-9\.]*\n\n\);tenough;$!ba;:enough/\nFax: \1###\n/;$!ba;P;D" file.txt 

Что не так ?

2 Solutions collect form web for “Подставка Sed с 3 линиями раздвижных окон”

Вы получили часть P;D Остальное – неудачная попытка потянуть линии в пространстве шаблонов, пока замена не будет успешной, что не обязательно плохо, но определенно не скользящее окно.
Вы должны вытащить одну строку, если на первой строке, затем используйте цикл N;P;D (таким образом, у вас всегда есть три строки в пространстве шаблонов) и пытайтесь заменить каждый раз, когда вы тянете новую строку

 sed '1N;$!N;s/\(PATTERN\n\)\(\n\)$/\1###\2/;P;D' infile 

Я думаю, что это близко к вашей первоначальной попытке реализации:

 sed ':a; $q; N; s/\(Fax:.*\n\)\n$/\1###\n/; 3,${P;D}; ba' 

Ex.

 $ sed ':a; $q; N; s/\(Fax:.*\n\)\n$/\1###\n/; 3,${P;D}; ba' input > output $ diff -y input output Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 | ### Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 | ### Fax: 05.11.22.33.44 Fax: 05.11.22.33.44 

Трюк – это 3,${P;D} , это то, что поддерживает 3-строчное окно (путем выталкивания одной строки из пространства шаблонов каждый раз вокруг цикла, но только после того, как количество строк достигает 3).

  • Ошибка при использовании sed
  • команда sed внутри sed
  • Переключение слова в строку
  • Заменить последние символы в каждой строке
  • sed: удалить все вхождения строки, кроме первой
  • Удаление второго и последнего символов в каждой строке - с помощью sed
  • \ 1 - что означает это действие sed?
  • sed, найти и разместить после и до
  • sed - найти и заменить текст, содержащий "/"
  • Использование sed для удаления всего двух слов?
  • sed - как заменить пробел или знак подчеркивания
  • sed с опцией -n и '$ ='
  • Interesting Posts

    Postfix больше не регистрируется в / var / log / mail после его удаления и повторного создания?

    Как убить командную строку хрома над ssh?

    Изменение разрешений на пользовательские файлы для автоматизации создания Apache VirtualHost

    Время запуска для запуска приложения через команду терминала

    Тесты MTU (IPv4) в Linux

    Обрезать и изменить размер изображения в формате a5 pdf

    Чтобы настроить скрипт для отправки электронной почты только тогда, когда команда diff дает разницу

    Как подключиться к Gnome 3 с клиентом Windows VNC?

    Не удалось синхронизировать клиент NTP v4 с сервером Windows AD

    как определить процесс, который блокирует приостановку / спящий режим

    Windows 8.1 не загружается на моем ноутбуке с двойной загрузкой

    Не удалось достичь сети из chroot

    Есть ли способ, чтобы функция в моем сценарии bash автоматически запускалась при любой ошибке команды?

    Переход на MySQL с 5,7 до 5,1 в CentOS 6

    Замена Mac OSX на Linux Distro или FreeBSD

    Linux и Unix - лучшая ОС в мире.