Eu tenho um arquivo com a seguinte entrada. Os números separados por pontos representam endereços. Qualquer número no endereço pode ter um ou mais dígitos da seguinte forma:
[112.112.112.112;3.3.3.3;44.44.44.44]
[6.6.6.6;17.17.17.17;88.88.88.88]
Eu quero extrair cada endereço sem os pontos e vírgulas e colchetes (os endereços são separados por ponto e vírgula ;
), e inserir cada endereço em uma linha em um novo arquivo para produzir esta saída:
112.112.112.112
3.3.3.3
44.44.44.44
6.6.6.6
17.17.17.17
88.88.88.88
Como primeiro passo, tentei grep para extrair os endereços da seguinte forma:
grep -E '\d+\.\d+\.\d+\.\d+' myfile.txt > newfile.txt
Mas não imprime nada.
Extended Regex (
-E
ouegrep
) não conhece\d
. Use-P
como sugerido por @Alexander ou use-E
com[0-9]
ou[[:digit:]]
em vez disso.Adicione
-o
para selecionar apenas as correspondências em vez de linhas correspondentes inteiras. Isso também dividirá as partidas individuais em novas linhas.ou
usando Perl Regex (
-P
oupgrep
):Se você mudar
+
para*
você também pode usar o Basic Regex :Substitua
-E
por-P
e adicione-o
:Usando
awk
:Ou com
tr
se você não se importa com a primeira linha vazia:grep
é uma espécie de exagero para esta tarefa.tr
é suficiente:A
sort -u
parte remove endereços duplicados.