5

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?

  • 3
    Why grep? grep is for searching. You seem to need either cut or awk, but the read builtin also seems suitable. – manatwork Dec 7 '12 at 12:20
  • this work as @peterph proposed ^\w*\b. Are cut or sed/awk more convinient? my case is simple. i can use myVar=`users | grep -o "^\w*\b"`, no? – Yurij73 Dec 7 '12 at 13:23
  • 3
    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). – manatwork Dec 7 '12 at 13:33
  • @Yurij73 the difference lies mostly in the execution time. with read you don't spawn a new process. If you do this many times, you'll notice the difference. – peterph Dec 7 '12 at 15:19
  • Does it better use awk? #!/bin/bash ( users|awk '$0=$1' )>file; read myVar <file; rm -f file; echo $myVar; – Yurij73 Dec 7 '12 at 20:03
7

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

  • Alternative syntax: grep -o "[^ ]*" – kenorb Oct 16 '15 at 15:19
  • @kenorb which is a bit different actually (but will work in most cases). – peterph Oct 16 '15 at 21:41
20

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.

0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.