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

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

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

с этим :

  • Удалить до первого появления двоеточия с помощью sed
  • Заменить "\/"
  • Вербальное считывание регулярных выражений sed в квадратных скобках, звездочка вне скобок
  • смещение пробелов, совпадающее с путаницей
  • замена специальных символов с помощью команды sed
  • Почему sed выводит команду char 53: unterminated `s '
  •  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 

    Что не так ?

  • Как команда sed '1! G; h; $! D' отбрасывает содержимое файла?
  • Использование sed для замены специальных символов
  • Замените содержимое группы захвата регулярного выражения, используя sed
  • Проблема с sed
  • Как отдать и вернуть часть матча?
  • Вопрос о нескольких командах sed
  • 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).

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