Как считать определенные строки после находки некоторый текст?

У Вас нет полномочий получить доступ к сокету для связи с libvirt демоном. Документация openSUSE о libvirt объясняет, как получить некорневой доступ. Для решения определенной проблемы, должно быть достаточно выполнить virt-менеджера с sudo, т.е. sudo virt-manager

12
15.10.2014, 17:35
5 ответов

AN AWK Решение :

$ awk '$0 == "UNIX" {i=1;next};i && i++ <= 2' file
Test 5
Test 6

Объяснение

  • / ^ unix $ / {i = 1; следующий} : Если мы видим UNIX , мы устанавливаем переменную I = 1 , обработка к следующему вводу.

  • Если установлено значение I (означает, что мы видели UNIX ), I && i ++ <= 2 только в следующих двух строках после UNIX , вызывающий awk , выполнено действие по умолчанию Печать $ 0 .

  • Перед просмотром UNIX , I I не был определен и начнутся с 3-й строки после UNIX , I имел значение больше 2 , что делает выражение I && i ++ <= 2 , оценивалась до false, вызывая awk ничего не делать.

10
27.01.2020, 19:54

Это, похоже, хорошо помогает:

sed -n '/UNIX/{n;p;n;p}' /path/to/file

Доказательство концепции:

$ for i in {1..9}; do echo $i; done | sed -n '/4/{n;p;n;p}'
5
6
0
27.01.2020, 19:54

Решение grep :

grep -A2 -P '^UNIX$' file

Объяснение: -A означает: вывести следующие две строки после совпадения

Или awk:

awk '$0=="UNIX"{getline; print; getline; print}' file

Объяснение: Этот оператор ищет UNIX в строке ( $ 0 == "UNIX" ). Если это задано, он получает следующий следующий в свой буфер ( getline ) и печатает буфер ( print ). Это делается дважды.

Или используйте sed :

sed -n '/^UNIX$/{n;p;n;p}' file

Объяснение: Это поиск для UNIX ( / ^ UNIX $ / ). Если он обнаружен, он выполняет часть в {...} . n означает следующий, p означает печать. Это тоже делается дважды.

12
27.01.2020, 19:54
grep -A 2 UNIX file.txt

На странице руководства grep этот параметр описывается следующим образом:

  -A NUM, --after-context=NUM
      Print NUM  lines  of  trailing  context  after  matching  lines.
      Places  a  line  containing  --  between  contiguous  groups  of
      matches.
4
27.01.2020, 19:54

Вы можете использовать ex :

ex -s +'1,/UNIX/d|%p|q!' file_or_/dev/stdin

где:

0
27.01.2020, 19:54

Теги

Похожие вопросы