Используя grep, awk, и т.д. к команде фильтрации производится

Я буду использовать route как пример.

route -n

Вышеупомянутая выходная маршрутная информация. Верхний ряд является Вашим активным соединением. Я могу управлять выводом только к второму столбцу путем выполнения:

route -n | awk '{print $2}'

Теперь, как я могу отфильтровать строкой?

3
задан 30 November 2011 в 00:30

4 ответа

Для печати конкретной строки, можно использовать sed:

route -n | sed -n 2p

распечатать вторую строку.

sed, что

Я дам короткое и неполное объяснение того, что sed. Для полного описания я предлагаю видеть sed информационные страницы (выполненный info sed).

sed средний потоковый редактор, т.е. редактор, который может действовать на поток (или канал) текстовых данных, хотя это может действовать также на файлы; существенно это означает это (по-другому по сравнению с ed) это никогда не может возвращаться к предыдущей строке.

sed, как awk чтения одна строка за один раз и применяют сценарий к той строке для возможного изменения его. В конце сценария по умолчанию измененная строка производится к stdout. Затем sed пойдите на следующую строку.

Сценарий является последовательностью парной команды адреса, если соответствие строки адрес затем команда выполняется.

Типичное использование sed должен выполнить замену шаблона с чем-то, например.

command | sed 's/ *$//'

здесь строка между одинарными кавычками является сценарием, состоя из единственной пары команды адреса. Адрес отсутствует (это появилось бы перед s), в таком случае команда применяется по умолчанию ко всем входным строкам. s команда, и остальная часть строки конкретные инструкции команды, говоря "замену 0 или больше возникновения (*) из пространства () символ в конце на строке ($) ни с чем (т.е. удаляют их)".

Другая полезная команда p и d. p управляйте печатают текущую строку, это полезно в сочетании с -n опция, которые изменяют поведение по умолчанию для печати текущей строки в конце сценария. Таким образом в

sed -n '2p'

сценарий является строкой 2p состоя на адресе 2 и команда p, таким образом, строка 2 будет распечатана, вся другая строка вместо этого не будет распечатана, не из-за -n опция.

d команда удаляет строку, например

    sed '3,6d'

удалил бы все строки от третьего до шестого. 3,6 диапазон адресов. Я замечаю, что в этом случае не нужно использовать -n опция, потому что мы хотим распечатать все другие строки.

Последняя вещь, адрес мог быть шаблоном, как в

sed -n '/^#/p'

эта команда распечатала бы все начало строк (^) с a # символ.

3
ответ дан 1 December 2019 в 15:45

Можно отфильтровать Подряд путем передачи по каналу к grep и нахождения строки, которая запускается с IP-адреса интереса, например, если бы Вы хотите видеть строку для 192.168.1.1, Вы сделали бы:

$ route | grep ^192.168.1.0
192.168.1.0     *               255.255.255.0   U     2      0        0 wlan0

'^' метка означает "line-starts-with'. Таким образом, Вы могли быть более универсальными с:

$ route | grep ^192.168.1
192.168.1.0     *               255.255.255.0   U     2      0        0 wlan0
192.168.111.0   *               255.255.255.0   U     0      0        0 virbr0
1
ответ дан 1 December 2019 в 15:45

Можно использовать регулярное выражение для сообщения awk, какие строки Вы хотите, например.

route -n | awk '/^192.168/ {print $2}'

произведет столбец секунд всех строк, которые запускаются с 192.168

1
ответ дан 1 December 2019 в 15:45

ответ awk мог также посмотреть что-то как:

$0 ~ ( /matchthis/ ) { print $2 }

0$ просто относятся к целой строке/строке

sed и awk могут быть очень мощной комбинацией

регулярные выражения имеют смысл осваивать

0
ответ дан 1 December 2019 в 15:45

Другие вопросы по тегам:

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