Как я могу использовать grep для поиска /etc/services
и вывод только строки для сервисов, имена которых заканчиваются s
?
cut -f1 /etc/services | grep -v '^#' | grep 's$'
или
cut -f1 /etc/services | grep '^[^#].*s$'
Файл /etc/services
содержит несколько столбцов, в то время как название службы является первым. Распечатать первый столбец файла, который использует вкладки (\t
), используйте cut -f1
(f
обозначает поле).
Существуют также комментарии в файле, которые запускаются с a #
символ. Команда grep -v '^#'
фильтрует их.
-v
строки печати, не содержащие шаблон,^
означает начало строки.Теперь мы получаем список сервисов, которые могут быть просто фильтрованы с помощью grep 's$'
.
$
означает конец строки.grep
вызовы могут быть объединены в один: grep '^[^#].*s$'
. Это регулярное выражение ищет строки, выполняющие все следующие правила: #
(чтобы быть более точным: начало (^
) с символом не равняются #
([^#]
).*
) иs
прямо до конца строки ($
).sed
или awk
могли сделать задание, также.Вы могли бы найти, что сервисные названия перечислены многократно, так как они используют несколько портов. (Эта информация охвачена вторым столбцом, который мы отфильтровали.) Существует команда для печати каждого объекта однажды и в алфавитном порядке одновременно: sort --unique
. Просто передайте вывод по каналу предыдущей команды к sort
:
cut -f1 /etc/services | grep '^[^#].*s$' | sort --unique
grep "s$" /etc/services
ответ.
Вы находите ответ путем чтения руководства, man grep
в терминале или поиске его в сети.