Usando sed / awk para eliminar cualquier cosa después del primer espacio

20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Usando sed / awk / replace, en el texto anterior quiero eliminar todo lo que viene después del primer espacio en cada línea. Por ejemplo, la salida será:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

Cualquier ayuda será apreciada.

Rana Khan
fuente

Respuestas:

35

Sed

sed 's/\s.*$//'

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Como se señaló en los comentarios, -ono es POSIX; sin embargo, tanto GNU como BSD lo tienen, por lo que debería funcionar para la mayoría de las personas.

Además, \s/ \Spuede no estar en todos los sistemas, si el suyo no lo reconoce, puede usar un espacio literal, o si desea espacio y tabulación, aquellos en una expresión de paréntesis ( [...]) o la [[:blank:]]clase de caracteres (tenga en cuenta que estrictamente hablando \ses equivalente a[[:space:]] e incluye caracteres de espaciado vertical, así como CR, LF o VT que probablemente no le interesen).

El awk primero supone que las líneas no comienzan con un carácter en blanco.

Kevin
fuente
14
cut -d ' ' -f 1 < your-file

Sería el más eficiente.

Stéphane Chazelas
fuente
44
Noté esto en varias de sus respuestas y me preguntaba si hay una razón para ello: siempre parece agregar redireccionamiento de entrada, incluso cuando el comando puede funcionar sin él. ¿Puede explicar por qué <es útil aquí?
Joseph R.
55
@JosephR. ¿Quieres decir cut < filevs cut file? Entonces vea unix.stackexchange.com/a/70759/22565
Stéphane Chazelas
cortar puede ser la mejor solución para problemas así de simples. Me gustaría reservar awk (o perl) para una correspondencia más compleja.
ChuckCottrill
@StephaneChazelas Gracias por el conocimiento (característico) :)
Joseph R.
5
awk '{print $1}' file

o

sed 's/ .*//'
jlliagre
fuente
1

Y el que pasa perl,

$ perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

A través de GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
Avinash Raj
fuente