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=numStop 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?grepis for searching. You seem to need eithercutorawk, but thereadbuiltin 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:33readyou 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