Вот описание grep из GNU.org:
grep выполняет поиск входных файлов для строк, содержащих совпадение с заданным списком шаблонов. Когда он находит совпадение в строке, он копирует строку на стандартный вывод (по умолчанию) или производит любой другой тип вывода, который вы запросили, с параметрами.У меня есть эта команда, которую я часто использую, которая дает имя текущего подключенного монитора:
xrandr | grep " connected " | awk '{ print$1 }'
Я не вижу никаких файлов в этой команде или ссылки на их, так что же происходит? [F4] используется для других вещей помимо поиска файлов?
Когда вы делаете:
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 согласовывается после желаемой части).