Что делает grep?

Вот описание grep из GNU.org:

grep выполняет поиск входных файлов для строк, содержащих совпадение с заданным списком шаблонов. Когда он находит совпадение в строке, он копирует строку на стандартный вывод (по умолчанию) или производит любой другой тип вывода, который вы запросили, с параметрами.

У меня есть эта команда, которую я часто использую, которая дает имя текущего подключенного монитора:

xrandr | grep " connected " | awk '{ print$1 }'

Я не вижу никаких файлов в этой команде или ссылки на их, так что же происходит? [F4] используется для других вещей помимо поиска файлов?

1
задан 9 November 2015 в 14:17

1 ответ

Когда вы делаете:

xrandr | grep " connected "

, вы в основном перенаправляете стандартный вывод (файловый дескриптор 1, /dev/stdout) в xrandr на стандартный вход (дескриптор файла 0, /dev/stdin) из grep, это задание канала.

Поскольку grep принимает входные данные от стандартного ввода, когда имя файла не задано, ваша команда будет успешной в отношении файла.

Вы можете думать об этом как:

grep 'pattern' /dev/stdin

Вы можете получить желаемый результат только с помощью grep (нет awk):

% xrandr | grep -Po '^[^ ]+(?= connected)'
LVDS1

Это получит первое разделенное пробелом слово строки (^[^ ]+), за которым следует пробел, а затем слово connected ((?= connected) представляет собой положительный обратный шаблон с нулевой шириной, обеспечивающий <space>connected согласовывается после желаемой части).

10
ответ дан 23 May 2018 в 15:56

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

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