20

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?

Eric Renouf
  • 18,431
Yurij73
  • 1,992

4 Answers4

51

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.

kenorb
  • 20,988
10

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).

peterph
  • 30,838
2

it worked for me.the first match catch with:

users | grep -m 1 "^\b\w*\b"

and the last match catch with

users | grep "^\b\w*\b" |tail -1
Thomas
  • 6,362
foad322
  • 21
1

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.

kenorb
  • 20,988