pt sed para remover texto se existir entre o primeiro espaço e o primeiro número

2

Eu tenho um arquivo assim:

[email protected] [email protected] 100.0.9.181
[email protected] [email protected] 100.1.147.27
[email protected] [email protected] 100.32.40.7
[email protected] [email protected] [email protected] 101.0.7.77
[email protected] 101.100.177.191
[email protected] [email protected] [email protected] 101.17.155.18
[email protected] 101.174.11.146
[email protected] 101.174.2.218

Gostaria de usar sed (ou awk ) para manipular o arquivo para que tudo, após o primeiro espaço e até (mas não incluindo o espaço anterior), a primeira ocorrência de um número seja removido. Então, o acima acabaria assim:

[email protected] 100.0.9.181
[email protected] 100.1.147.27
[email protected] 100.32.40.7
[email protected] 101.0.7.77
[email protected] 101.100.177.191
[email protected] 101.17.155.18
[email protected] 101.174.11.146
[email protected] 101.174.2.218

Eu tentei:

sed  '/\s.*$\([0-9]\)//g' <filename>
sed  '/\s.*$/,/0-9/p' <filename>
sed  '/\s.*$/,/\(\[0-9\]\)/p' <filename>

e muitas outras combinações de exemplos que encontrei na web. Eu acho que o problema pode ser que às vezes a linha já é como eu quero; outras vezes, há dois ou mais endereços de e-mail extras entre o primeiro endereço de e-mail e o endereço IP.

Editar: sempre quero que o primeiro endereço de e-mail ocorra em uma linha (às vezes há apenas um; outras vezes, há mais de um) e tudo o mais na linha removido até o espaço antes do endereço IP no fim. Eu preciso manter um espaço entre o endereço de e-mail e o endereço IP. Se a linha contiver apenas um endereço de e-mail e o endereço IP, eu gostaria de deixá-lo em paz.

Alguém (por favor) pode ajudar?

    
por samgoober 07.12.2015 / 17:10

1 resposta

2

Para obter a saída exibida (e não a que você descreve), basta imprimir o primeiro e o último campo usando awk :

awk '{print ,$NF}' file

Ou perl :

perl -lane 'print "$F[0] $F[$#F]"' file
    
por terdon 07.12.2015 / 17:41