J'essaie de grep le nom d'utilisateur:
users | grep "^\b\w*\b" -P
Comment puis-je le faire afficher uniquement le premier match avec grep
?
shell
grep
regular-expression
Yurij73
la source
la source
grep
?grep
est pour la recherche. Vous semblez avoir besoin de l'uncut
ou de l' autreawk
, mais la fonctionread
intégrée semble également appropriée.users | cut -d' ' -f1
,users | sed 's/\s.*//'
,users | awk '$0=$1'
. Si vous souhaitez le stocker dans une variable, utilisezbash
:read myVar blah < <(users)
ouread myVar blah <<< $(users)
.read
vous ne déclenchez pas un nouveau processus. Si vous faites cela plusieurs fois, vous remarquerez la différence.Réponses:
Si vous voulez vraiment retourner juste le premier mot et que vous voulez le faire
grep
et que vousgrep
êtes une version récente de GNUgrep
, vous voulez probablement l'-o
option. Je crois que vous pouvez le faire sans le-P
et\b
le début n'est pas vraiment nécessaire. Par conséquent:users | grep -o "^\w*\b"
.Pourtant, comme l'a mentionné @manatwork, le shell intégré
read
oucut
/sed
/awk
semble être plus approprié (en particulier une fois que vous arrivez au point où vous devez faire quelque chose de plus).la source
grep -o "[^ ]*"
Pour afficher uniquement la première correspondance avec
grep
, utilisez le-m
paramètre, par exemple:la source
cela a fonctionné pour moi.la première prise de match avec:
et le dernier match avec
la source
Pourquoi
grep
? Lagrep
commande est pour la recherche. Vous semblez avoir besoin decut
ouawk
, mais la lecture intégrée semble également appropriée.Comparez-les:
Si vous souhaitez le stocker dans une variable, en utilisant bash:
ou:
Réponse ci-dessus basée sur les commentaires @manatwork .
la source