I'm trying to grep username:
users | grep "^\b\w*\b" -P
How can I get it to only show the first match with grep
?
I'm trying to grep username:
users | grep "^\b\w*\b" -P
How can I get it to only show the first match with grep
?
To show only the first match with grep
, use -m
parameter, e.g.:
grep -m1 pattern file
-m num
,--max-count=num
Stop reading the file after num matches.
If you really want return just the first word and want to do this with grep
and your grep
happens to be a recent version of GNU grep
, you probably want the -o
option. I believe you can do this without the -P
and the \b
at the beginning is not really necessary. Hence: users | grep -o "^\w*\b"
.
Yet, as @manatwork mentioned, shell built-in read
or cut
/sed
/awk
seem to be more appropriate (particularly once you get to the point you'd need to do something more).
Why grep
? The grep
command is for searching. You seem to need either cut
or awk
, but the read builtin also seems suitable.
Compare them:
users | cut -d' ' -f1
users | sed 's/\s.*//'
users | awk '$0=$1'
If you want to store it in a variable, using bash:
read myVar blah < <(users)
or:
read myVar blah <<< $(users).
Above answer based on @manatwork comments.
grep
?grep
is for searching. You seem to need eithercut
orawk
, but theread
builtin also seems suitable. – manatwork Dec 07 '12 at 12:20users | cut -d' ' -f1
,users | sed 's/\s.*//'
,users | awk '$0=$1'
. If you want to store it in a variable, usingbash
:read myVar blah < <(users)
orread myVar blah <<< $(users)
. – manatwork Dec 07 '12 at 13:33read
you don't spawn a new process. If you do this many times, you'll notice the difference. – peterph Dec 07 '12 at 15:19#!/bin/bash ( users|awk '$0=$1' )>file; read myVar <file; rm -f file; echo $myVar; – Yurij73 Dec 07 '12 at 20:03