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.

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.


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

Sería el más eficiente.


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.