В качестве примера я использую route
.
route -n
Вышеуказанная информация о маршрутизации выводит. Верхняя строка - это ваше активное соединение. Я могу обработать вывод только во втором столбце, выполнив:
route -n | awk '{print $2}'
Теперь, как я могу фильтровать по строке?
Чтобы напечатать определенную строку, вы можете использовать sed:
route -n | sed -n 2p
для печати второй строки.
Я дам короткое и неполное объяснение того, что sed. Для полного описания я предлагаю просмотреть sed информационные страницы (run 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'
эта команда будет печатать все строки, начинающиеся (^) с символом #.
Чтобы напечатать определенную строку, вы можете использовать sed
:
route -n | sed -n 2p
для печати второй строки.
sed
, что есть Я дам короткое и неполное объяснение того, что sed
. Для полного описания я предлагаю просмотреть sed
информационные страницы (run info sed
).
sed
означает s tream ed itor , то есть редактор, который может воздействовать на поток (или канал) текстовых данных, хотя он может действовать и на файлы; по существу это означает, что (иначе, чем 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'
эта команда будет печатать все строки, начинающиеся (^
) с символом #
.
Вы можете отфильтровать IN в строке по трубопроводу до grep и найти строку, которая начинается с вашего интересующего IP-адреса, например, если вы хотите увидеть строку для 192.168.1.1, вы бы сделали:
[ f1]Знак «^» означает «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 может быть очень мощной комбинацией [!d2 ]
регулярные выражения стоят того, чтобы овладеть