Как искать и заменять строку символами новой строки в командной строке в файле

Я хочу заменить все вхождения текстовой строки в текстовом файле в командной строке на CentOS 7.2.

Search-string: ).\nPORT Replacement-string: ). \n0 closed ports\nPORT 

Я знаю, это может быть достигнуто с помощью различных инструментов, таких как sed , awk , tr , … но я не могу найти простой способ сделать это и понять команду (important ;-)). Для меня самой большой проблемой являются новые строки, без них это очень простой вызов sed . Но с новостями …

Любое предложение с объяснением очень приветствуется.

отредактированный

вход

 ... Nmap scan report for wxyz (xxxx) Host is up (0.00090s latency). PORT STATE SERVICE 21/tcp open ftp ... Nmap scan report for wxyz (xxxx) Host is up (0.00079s latency). Not shown: 2 closed ports PORT STATE SERVICE 22/tcp open ssh |_banner: SSH-2.0-mpSSH_0.2.1 ... 

Вывод

 ... Nmap scan report for wxyz (xxxx) Host is up (0.00090s latency). 0 closed ports PORT STATE SERVICE 21/tcp open ftp ... Nmap scan report for wxyz (xxxx) Host is up (0.00079s latency). Not shown: 2 closed ports PORT STATE SERVICE 22/tcp open ssh |_banner: SSH-2.0-mpSSH_0.2.1 ... 

2 Solutions collect form web for “Как искать и заменять строку символами новой строки в командной строке в файле”

Вот один из возможных способов

 sed '/)\. $/ { n /^PORT/ i\ 0 closed ports }' 

тестирование

 $ sed '/)\. $/ { n /^PORT/ i\ 0 closed ports }' < input ... Nmap scan report for wxyz (xxxx) Host is up (0.00090s latency). 0 closed ports PORT STATE SERVICE 21/tcp open ftp ... Nmap scan report for wxyz (xxxx) Host is up (0.00079s latency). Not shown: 2 closed ports PORT STATE SERVICE 22/tcp open ssh |_banner: SSH-2.0-mpSSH_0.2.1 ... 

Вы можете использовать N в sed, чтобы вытащить следующую строку ввода в пространстве шаблонов, а затем работать с двумя строками одновременно.

В качестве примера условно вытащите следующую строку при просмотре foo , а затем выполните замену на обе строки. (Обратите внимание, что последовательные строки с foo сломают это.)

 echo -e "asf\nfoo\nbar" | sed -e '/foo/N;s/o\nb/od\nc/' 

Кроме того, GNU sed имеет опцию -z которая отделяет «строки» от символов NUL вместо строк новой строки. Это легко позволит вам сопоставлять шаблоны, пересекающие новую строку, но приведет к тому, что операции с строкой будут выполняться сразу на всем входе, что может быть проблемой при большом вводе.

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

  • проверять содержимое файла с помощью регулярных выражений bash
  • Использование Grep -o или Sed / Awk для захвата фрагмента из середины строки
  • sed, получив ошибку: sed: unterminated {
  • Удалите пробелы и круглые скобки в именах файлов с помощью sed
  • Найти текст в файле и вставить текст после него
  • Как добавить новые строки из другого файла с помощью sed
  • Извлечение нескольких экземпляров текста между теми же двумя строками текста
  • sed в bash с переменными и двойными кавычками вызывает неисполненную ошибку
  • Как извлечь одно значение из однострочных кортежей?
  • Форматирование ifconfig с помощью sed / awk
  • Очистка эксплойтов PHP от зараженных файлов с помощью sed
  • Linux и Unix - лучшая ОС в мире.