Ich versuche, den Benutzernamen zu erfassen:
users | grep "^\b\w*\b" -P
Wie kann ich dafür sorgen, dass nur das erste Spiel mit grep
angezeigt wird?
shell
grep
regular-expression
Yurij73
quelle
quelle
grep
?grep
ist für die Suche. Sie scheinen entwedercut
oder zu brauchenawk
, aber dasread
eingebaute scheint auch geeignet.users | cut -d' ' -f1
,users | sed 's/\s.*//'
,users | awk '$0=$1'
. Wenn Sie es in einer Variablen speichern möchten, verwenden Siebash
:read myVar blah < <(users)
oderread myVar blah <<< $(users)
.read
dir spawne keinen neuen Prozess. Wenn Sie dies viele Male tun, werden Sie den Unterschied bemerken.Antworten:
Wenn Sie wirklich nur das erste Wort zurückgeben möchten und dies mit tun möchten
grep
und es sichgrep
zufällig um eine aktuelle Version von GNU handeltgrep
, möchten Sie wahrscheinlich die-o
Option. Ich glaube, Sie können dies ohne das tun-P
und das\b
am Anfang ist nicht wirklich notwendig. Daher :users | grep -o "^\w*\b"
.Wie @manatwork bereits erwähnt hat, scheint die integrierte Shell
read
odercut
/sed
/awk
angemessener zu sein (insbesondere, wenn Sie den Punkt erreicht haben, an dem Sie etwas mehr tun müssen).quelle
grep -o "[^ ]*"
grep
Verwenden Sie-m
Parameter, um nur die erste Übereinstimmung mit anzuzeigen, z.quelle
es hat bei mir funktioniert. Der erste Matchfang mit:
und das letzte Match fangen mit
quelle
Warum
grep
? Dergrep
Befehl dient zur Suche. Sie scheinen entwedercut
oder zu benötigenawk
, aber das eingebaute Lesen scheint auch geeignet zu sein.Vergleiche sie:
Wenn Sie es in einer Variablen speichern möchten, verwenden Sie bash:
oder:
Die obige Antwort basiert auf @ manatwork-Kommentaren .
quelle