Estou tentando filtrar endereços IP do ip a
comando via sed
. Quando escrevo, inet6*
funciona. Quando escrevo, inet6?
não encontra a correspondência.
Com *
:
$ ip a | sed -ne 's,^ *inet6* \([^ /]*\).*$,\1,p'
05:06:33
127.0.0.1
::1
192.168.43.222
fe80::df04:ee5d:a05f:ba1
Com ?
:
$ ip a | sed -ne 's,^ *inet6? \([^ /]*\).*$,\1,p'
05:07:39
Quando tento executar com +
em vez *
disso também não funciona:
$ ip a | sed -ne 's,^ *inet6* \([^ /]+\).*$,\1,p'
05:35:21
Sed funciona com ?
ou +
? Ou só funciona com *
?
Em uma expressão regular básica POSIX , que é
sed
usada por padrão, o?
caractere corresponde a um ponto de interrogação literal e+
a um sinal de mais. Se você quiser corresponder opcionalmente a um6
caractere, use6\{0,1\}
(facilmente generalizado para6\{1,\}
ser o mesmo que6+
em uma expressão estendida).Você também pode passar a usar expressões regulares estendidas POSIX e
-E
usar6?
como parece acostumado (você também precisaria alterar seu grupo de captura de\(...\)
para(...)
):Observe também que isso
6*
corresponderia à string vazia e a qualquer comprimento de uma série de6
caracteres.Veja também: