Я создаю сценарий, который подключается к серверу и выгружает вывод во временный файл. Я хочу использовать sed в сценарии, чтобы получить конкретную информацию из временного файла. На выходе всегда будет пунктирная линия из 80 символов, затем информация, которую я хочу, за которой следует оператор Disconnected.
У меня работает регулярное выражение, если это была всего лишь одна строка, проблема в том, как мне сгруппировать новые строки?
Регулярное выражение
-\{80\}[\r\n]*\(.*\)[\r\n]\{4\}Disconnected
файл
...
--------------------------------------------------------------------------------
The information that I want to get can be a single line or multiple lines.
Another line to grab.
And this should be caught as well.
Disconnected ...
Желаемый результат
The information that I want to get can be a single line or multiple lines.
Another line to grab.
And this should be caught as well.
Сначала используйте флаг '-n', чтобы подавить автоматический вывод. Далее используйте sed адреса цитировать интересующую вас часть (от тире "---" до строки со словом "Disconnected"). Наконец, распечатайте пространство шаблонов (все пространство шаблонов, поскольку вас интересует все, что внутри него).
~$ sed -n '/^---*/,/Disconnected/{p}' inputfile
Отредактировано из-за запроса LF4 на удаление из результата строчки с тире.
С помощью «адресов» вы указываете отдельные пространства шаблонов. Таким образом, вы можете делать все, что захотите, с этими отдельными пространствами шаблонов. В том числе удалить строки по регулярному выражению. В этом примере команда удаляет строки, образованные дефисами, из пространства шаблонов, давая результат, который вы ищете:
~$ sed -n '/^---*/,/Disconnected/{/^---*/d;p}' inputfile
HTH
sed
можно искать шаблон в нескольких строках, объединив их в которые называется «удерживаемым пространством», примерно так:
$ sed -n '1h;1!H;${;g;s/.*\(-\{80\}.*Disconnected\).*/\1/p;}' file
1h
: скопируйте первую строку, чтобы удерживать пробел1!H
: со второй строки добавить, чтобы удерживать пробел$
: последняя строкаg
: скопировать удерживаемое пространство в буфер шаблонаs/pattern/substitution/
: поиск и замена\1
: обратная ссылка на группу в шаблонеp
: РаспечататьСамый простой, но не очень эффективный способ -
Используйте tr, чтобы удалить все символы новой строки.
tr '\n' ' '
Повторно добавить новые строки после Disconnected
с помощью sed \a
команда.
sed
команда.