Como seu exemplo atual, Usando GNU sed
:
% sed -nr 's/^#.*\s([^\s]+)$//p' file.txt
8.8.8.8
172.32.255.255
206.32.14.25
Ou grep
com o PCRE:
% grep -Po '^#.*\s\K[^\s]+$' file.txt
8.8.8.8
172.32.255.255
206.32.14.25
Eu tenho um arquivo de texto como mostrado abaixo.
192.168.10.1
192.168.45.45
192.168.255.255
192.168.0.5
Random text comes here 8.8.8.8
224.23.25.12
225.1.2.3
226.0.0.0
227.1.2.6
227.25.25.26
228.145.123.45
229.255.255.255
Random text come here 172.32.255.255
231.25.12.12
232.45.13.45
238.0.0.0
233.1.2.3
234.255.255.255
236.123.123.123
237.153.125.155
235.235.235.255
239.239.239.10
172.21.255.255
172.31.10.10
172.16.32.21
Random text comes here 206.32.14.25
Estou usando o comando grep para filtrar todos os endereços IP públicos. E minha saída deve ser assim
8.8.8.8
172.32.255.255
206.32.14.25
Meu código funciona perfeitamente se eu não estiver usando o sinalizador -o. Mas se eu adicionar o sinalizador -o para obter apenas o padrão, não obtenho nenhuma saída.
CÓDIGO
egrep -vo '172\.1[6-9]([\.][0-9]{1,3}){2}|172\.2[0-9]([\.][0-9]{1,3}){2}|172\.3[01]([\.][0-9]{1,3}){2}|10([\.][0-9]{1,3}){3}|192\.168([\.][0-9]{1,3}){2}|22[456789]([\.][0-9]{1,3}){3}|23[0-9]([\.][0-9]{1,3}){3}' private_ip
Qualquer ajuda com isso seria apreciada. Obrigado
Como seu exemplo atual, Usando GNU sed
:
% sed -nr 's/^#.*\s([^\s]+)$//p' file.txt
8.8.8.8
172.32.255.255
206.32.14.25
Ou grep
com o PCRE:
% grep -Po '^#.*\s\K[^\s]+$' file.txt
8.8.8.8
172.32.255.255
206.32.14.25
Se os IPs públicos estiverem sempre alinhados com o texto "Olá, sou IP público", você pode usar awk
da seguinte forma:
awk '/Hello I am public IP/ {print $6}'
O espaço em branco no início da linha é ignorado, por isso $6
é o sexto campo separado por espaço em branco nessas linhas.