Я буду использовать route
как пример.
route -n
Вышеупомянутая выходная маршрутная информация. Верхний ряд является Вашим активным соединением. Я могу управлять выводом только к второму столбцу путем выполнения:
route -n | awk '{print $2}'
Теперь, как я могу отфильтровать строкой?
Для печати конкретной строки, можно использовать 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 #
символ.
Можно отфильтровать Подряд путем передачи по каналу к 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
Можно использовать регулярное выражение для сообщения awk, какие строки Вы хотите, например.
route -n | awk '/^192.168/ {print $2}'
произведет столбец секунд всех строк, которые запускаются с 192.168
ответ awk мог также посмотреть что-то как:
$0 ~ ( /matchthis/ ) { print $2 }
0$ просто относятся к целой строке/строке
sed и awk могут быть очень мощной комбинацией
регулярные выражения имеют смысл осваивать