Я пытаюсь grep имя пользователя:
users | grep "^\b\w*\b" -P
Как я могу заставить его показывать только первый матч с grep
?
shell
grep
regular-expression
Yurij73
источник
источник
grep
?grep
для поиска. Кажется, вам нужен либоcut
илиawk
, ноread
встроенный также кажется подходящим.users | cut -d' ' -f1
,users | sed 's/\s.*//'
,users | awk '$0=$1'
. Если вы хотите сохранить его в переменной, используйтеbash
:read myVar blah < <(users)
илиread myVar blah <<< $(users)
.read
вами не порождает новый процесс. Если вы сделаете это много раз, вы заметите разницу.Ответы:
Если вы действительно хотите вернуть только первое слово и хотите сделать это,
grep
и вашаgrep
версия является последней версией GNUgrep
, вы, вероятно, захотите эту-o
опцию. Я считаю, что вы можете сделать это без-P
и\b
в начале не является действительно необходимым. Следовательно:users | grep -o "^\w*\b"
.Тем не менее, как упоминалось в @manatwork, встроенная оболочка
read
илиcut
/sed
/awk
кажется более подходящей (особенно когда вы дойдете до того, что вам нужно будет сделать что-то большее).источник
grep -o "[^ ]*"
Чтобы показать только первое совпадение с
grep
, используйте-m
параметр, например:источник
у меня это сработало. первый матч поймал с:
и последний матч поймать с
источник
Почему
grep
? Командаgrep
для поиска. Кажется, вам нужно либо,cut
либоawk
, но встроенное чтение также кажется подходящим.Сравните их:
Если вы хотите сохранить его в переменной, используйте bash:
или:
Выше ответ на основе комментариев @manatwork .
источник