Usando sed / awk para remover qualquer coisa após o primeiro espaço

14
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Usando sed / awk / replace, no texto acima, eu quero remover qualquer coisa que venha depois do primeiro espaço em cada linha. Por exemplo, a saída será:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

qualquer ajuda será apreciada.

    
por Rana Khan 05.11.2013 / 23:29

4 respostas

28

Sed

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

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Como apontado nos comentários, -o não é POSIX; no entanto, tanto o GNU quanto o BSD o têm, então deve funcionar para a maioria das pessoas.

Além disso, \s / \S pode não estar em todos os sistemas, se o seu não reconhecer você pode usar um espaço literal ou, se desejar espaço e tabulação, aqueles em uma expressão de colchete ( [...] ), ou a classe de caractere [[:blank:]] (observe que, estritamente falando, \s é equivalente a [[:space:]] e inclui caracteres de espaçamento vertical, como CR, LF ou VT, com os quais você provavelmente não se importa).

O awk um assume que as linhas não começam com um caractere em branco.

    
por 05.11.2013 / 23:34
14
cut -d ' ' -f 1 < your-file

seria o mais eficiente.

    
por 05.11.2013 / 23:36
5
awk '{print $1}' file

ou

sed 's/ .*//'
    
por 05.11.2013 / 23:34
1

E esse até perl ,

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

Através do GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
    
por 06.06.2014 / 16:12

Tags