Estoy tratando de grep nombre de usuario:
users | grep "^\b\w*\b" -P
¿Cómo puedo hacer que solo muestre el primer partido grep
?
fuente
Estoy tratando de grep nombre de usuario:
users | grep "^\b\w*\b" -P
¿Cómo puedo hacer que solo muestre el primer partido grep
?
Si realmente desea devolver solo la primera palabra y desea hacer esto grep
y grep
resulta ser una versión reciente de GNU grep
, probablemente desee la -o
opción. Creo que puedes hacer esto sin el -P
y \b
al principio no es realmente necesario. Por lo tanto: users | grep -o "^\w*\b"
.
Sin embargo, como mencionó @manatwork, el shell incorporado read
o cut
/ sed
/ awk
parece ser más apropiado (particularmente una vez que llegue al punto que necesitaría hacer algo más).
grep -o "[^ ]*"
Para mostrar solo la primera coincidencia con grep
, use el -m
parámetro, por ejemplo:
grep -m1 pattern file
-m num
,--max-count=num
Deja de leer el archivo después de num num.
funcionó para mí. la primera captura del partido con:
users | grep -m 1 "^\b\w*\b"
y el último partido atrapado con
users | grep "^\b\w*\b" |tail -1
¿Por qué grep
? El grep
comando es para buscar. Parece que necesita cualquiera cut
o awk
, pero la lectura incorporada también parece adecuada.
Compararlos:
users | cut -d' ' -f1
users | sed 's/\s.*//'
users | awk '$0=$1'
Si desea almacenarlo en una variable, use bash:
read myVar blah < <(users)
o:
read myVar blah <<< $(users).
La respuesta anterior se basa en los comentarios de @manatwork .
grep
?grep
es para buscar Parece que necesita cualquieracut
oawk
, pero laread
construcción también parece adecuada.users | cut -d' ' -f1
,users | sed 's/\s.*//'
,users | awk '$0=$1'
. Si desea almacenarlo en una variable, usebash
:read myVar blah < <(users)
oread myVar blah <<< $(users)
.read
ustedes no generan un nuevo proceso. Si haces esto muchas veces, notarás la diferencia.