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


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Usando sed / awk / replace, no texto acima, desejo remover qualquer coisa que venha após o primeiro espaço em cada linha. Por exemplo, a saída será:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

Qualquer ajuda será apreciada.

Respostas:


35

Sed

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

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Como apontado nos comentários, -onão é POSIX; no entanto, tanto o GNU quanto o BSD o possuem, portanto ele deve funcionar para a maioria das pessoas.

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

O awk supõe-se as linhas não começar com um personagem em branco.


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

seria o mais eficiente.


4
Percebi isso em várias de suas respostas e fiquei pensando se há uma razão para isso: você sempre parece adicionar redirecionamento de entrada mesmo quando o comando pode funcionar sem ele. Você pode explicar por que isso <é útil aqui?
Joseph R.

5
@JosephR. Você quer dizer cut < filevs cut file? Então veja unix.stackexchange.com/a/70759/22565
Stéphane Chazelas

corte pode ser a melhor solução para problemas tão simples. Eu reservaria awk (ou perl) para uma correspondência mais complexa.
ChuckCottrill

@StephaneChazelas Obrigado pelo insight (característica) :)
Joseph R.


1

E a única perl,

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

Através do GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.