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
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?
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