Я хочу Использовать grep для поиска/etc/services

Как я могу использовать grep для поиска /etc/services и вывод только строки для сервисов, имена которых заканчиваются s ?

1
задан 20 February 2019 в 13:21

2 ответа

cut -f1 /etc/services | grep -v '^#' | grep 's$'

или

cut -f1 /etc/services | grep '^[^#].*s$'

Объяснение

  1. Файл /etc/services содержит несколько столбцов, в то время как название службы является первым. Распечатать первый столбец файла, который использует вкладки (\t), используйте cut -f1 (f обозначает поле).

  2. Существуют также комментарии в файле, которые запускаются с a # символ. Команда grep -v '^#' фильтрует их.

    • -v строки печати, не содержащие шаблон,
    • ^ означает начало строки.
  3. Теперь мы получаем список сервисов, которые могут быть просто фильтрованы с помощью grep 's$'.

    • $ означает конец строки.

Альтернативы

  • Два grep вызовы могут быть объединены в один: grep '^[^#].*s$'. Это регулярное выражение ищет строки, выполняющие все следующие правила:
    • не начало # (чтобы быть более точным: начало (^) с символом не равняются # ([^#])
    • сопровождаемый неуказанным количеством любых символов (.*) и
    • наличие s прямо до конца строки ($).
  • Команды sed или awk могли сделать задание, также.

Контакт с дубликатами

Вы могли бы найти, что сервисные названия перечислены многократно, так как они используют несколько портов. (Эта информация охвачена вторым столбцом, который мы отфильтровали.) Существует команда для печати каждого объекта однажды и в алфавитном порядке одновременно: sort --unique. Просто передайте вывод по каналу предыдущей команды к sort:

cut -f1 /etc/services | grep '^[^#].*s$' | sort --unique

См. также

2
ответ дан 3 December 2019 в 07:21

grep "s$" /etc/services ответ.

Вы находите ответ путем чтения руководства, man grep в терминале или поиске его в сети.

1
ответ дан 3 December 2019 в 07:21

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

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