Что делает grep?

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

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

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

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

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

5
задан 9 November 2015 в 03:17

2 ответа

От man grep (шахта акцента):

grep  searches the named input FILEs (or standard input if no files are
named, or if a single hyphen-minus (-) is given as file name) for lines
containing  a  match to the given PATTERN.  By default, grep prints the
matching lines.

И из документов GNU (снова, шахта акцента):

2.4 grep Программы

grep ищет именованные входные файлы строки, содержащие соответствие к данному шаблону. По умолчанию grep печатает согласующие отрезки длинной линии. Файл называют - обозначает стандартный вход. Если никакой вход не указан, grep поиски он рабочий каталог . если дали рекурсия определения параметра командной строки; иначе, grep вход стандарта поисков.

Стандартный вход, в этом случае, является каналом, подключенным с xrandrстандартный вывод.

grep является лишним в этом случае; awk может сделать задание отдельно:

xrandr | awk '/ connected /{print $1}'
14
ответ дан 23 November 2019 в 08:38

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

xrandr | grep " connected "

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

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

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

grep 'pattern' /dev/stdin
<час>

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

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

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

10
ответ дан 23 November 2019 в 08:38

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

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