Como as colunas são invariantes, você poderia cut -c32-
( man cut
) o arquivo.
120 , 3 <IP address> <port>
100 , 3 xx.xxx.xx.xxx xxxx
220 , 3 xxx.xx.xxx.xxx xxxx
280 3 xx.xxx.xx.xxx xx
Olá pessoal, estou trabalhando em um shell script e tentando encontrar alguns endereços IP no grep / awk / sed. Cleaing up a saída é complicado. Observe que a linha inferior não tem um ,
. Eu estou tentando fazer algo como $ awk '{print , }'
para filtrar as colunas IP e porta, mas isso não vai funcionar com a linha de fundo.
Parece que estou indo sobre o caminho errado. Como posso filtrar apenas os colomuns IP e port?
Como as colunas são invariantes, você poderia cut -c32-
( man cut
) o arquivo.
Como sempre no Linux, há mais de uma maneira de fazer o trabalho. Coloquei o texto que você forneceu em file.txt
. Aqui estão duas maneiras possíveis com base nas informações que você forneceu:
linux-okrz:~# awk '{print $(NF-1), $(NF)}' file.txt
address> <port>
xx.xxx.xx.xxx xxxx
xxx.xx.xxx.xxx xxxx
xx.xxx.xx.xxx xx
linux-okrz:~# sed 's|,||g' file.txt | awk '{print , }'
<IP address>
xx.xxx.xx.xxx xxxx
xxx.xx.xxx.xxx xxxx
xx.xxx.xx.xxx xx
Note que em ambos os exemplos a primeira linha está um pouco fora porque existe um espaço entre "IP" e "endereço". Supondo que na saída real é um endereço IP real que não deve ser um problema. Além disso, o segundo exemplo pode não funcionar se você tiver outras instâncias na saída com as quais há uma vírgula importante necessária.
Por fim, esses comandos são baseados somente na saída e na pergunta fornecida. Pode ser que mais ajustes sejam necessários dependendo do que mais estiver no arquivo e / ou o que mais você está fazendo no seu script.
Usando o grep:
grep -Po '(\d+\.){3}\d+\s+\d+'