Eu tenho um script que gera alguma saída. Quero verificar essa saída para qualquer endereço IP como
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
É fgrep
uma boa ideia?
Tenho bash disponível.
shell-script
grep
ip
Koshur
fonte
fonte
0010.0000.0000.0001
? Caso contrário, o arquivo pode conter itens que se parecem com endereços IP, como números de versão (soft-1.2.1100.1.tar.gz
, especificações de rede (10.0.0.0/24), 1.2.3.4.5)? Você aceitaria uma solução positiva em 333.444.555.666? Ou0377.0377.0377.0377
(um endereço IP quad-octal válido)?bash
estiver disponível, entãoawk
normalmente é também, por isso, este trabalho poder para você:awk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'
(Este one-liner traduz a saída do anfitrião lista XFR para/etc/hosts
formato.)Respostas:
Sim, você tem muitas opções / ferramentas para usar. Eu apenas tentei isso, funciona:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
para que você possa usar
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
para saudar os endereços IP da sua saída.fonte
"\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"
para encontrar CIDRs (assumindo que eles são válidos)iniciando minha resposta com base nesta resposta:
e convertendo a resposta em IPv6 completo, etc ...:
se você quiser manter o / nnn se estiver lá:
e também há a versão abreviada do IPv6 que inclui '::'.
Para obter mais respostas IPv6, você pode procurar aqui: /programming/53497/regular-expression-that-matches-valid-ipv6-addresses
fonte
fgrep
é o nome antigo de uma variantegrep
que ignora a correspondência de padrões. Eu recomendo que você usegrep
(ou até mesmoegrep
), especialmente porque você está claramente querendo a correspondência de padrões.Se o seu arquivo for chamado, por exemplo,
ips
você pode escrever algo como:Então você pode passar os parâmetros como segue o script
fonte
Se você possui a lista de IPs em um arquivo, um por linha,
grep
já possui a-f
opção conveniente :Isso pode causar alguns falsos positivos devido a seqüências de caracteres opcionalmente seguidas por outro número para torná-lo um IP diferente. Muitas coisas que você pode fazer sobre isso, dependendo do seu caso, você pode ou não decidir se preocupar.
fonte
Testado no SmartOS (uma variante do Solaris), esperamos que funcione em outros ambientes * nix:
Exemplo:
Esse padrão corresponde apenas ao IPv4 válido , ou seja,
x.x.x.x
ondex
varia de 0 a 255. Se você precisar extrair apenas o IP correspondente, adicione uma-o
opção ao comando acima. Você pode incorporar esse comando em um script bash e, presumivelmente, em outros scripts shell também. E seegrep
falhar,try grep -E ...
Utilizando-o em um script shell (bash):
ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip
fonte
Acho que minha resposta para outro post é mais adequada aqui. Graças a este post e a outros, eu vim com isso, que procura o formato IP correto e depois se livra de todas as linhas que contêm 256 ou superior. Substitua o IP por algo inválido para não ver saída:
O primeiro grep provavelmente foi encontrado nesta postagem e verifica se há números de 0 a 999 no formato XXXX
O segundo grep remove linhas com números 256-999, deixando apenas IPs de formato válidos, então pensei
MAS ... Como apontado pelo G-Man, eu estava errado ao assumir que o IP estaria em sua própria linha. Na maioria das vezes, porém, haverá um espaço ou outro divisor para procurar nos dois lados do IP. Os espaços / divisores podem ser removidos com sed ou outros meios depois que o IP for encontrado. Também adicionei -o ao primeiro grep:
O primeiro não dará saída, enquanto o segundo fornece e os espaços são removidos.
fonte
grep
jogaria fora essa linha por causa dos "500". (A pergunta nunca disse que os endereços IP no arquivo, se houver, estariam em uma linha por si mesmos.) Por outro lado, ele aceitará 1234.1.1.1 e 1.1.1.1234. Mas além disso, nada mal.Redirecione essa saída para alguns
outputFile
Simplesmente
grep
com padrão como,fonte
.
é um operador de expressão regular e precisa escapar para que ela seja tratada literalmentefonte