(?<=...)
é um operador de PCRE look-behind . Por si só, não corresponde a nada, mas age como uma condição (o que está à esquerda corresponde a ...
).
(?<=X)Y
corresponde a Y
, desde que o que está à esquerda corresponda a X
. Em blahYfooXYbar
, que corresponde ao segundo Y
, o X
não faz parte do que está sendo correspondido. O (?<=X)
em si corresponde ao ponto de largura zero ( imaginário ) pouco antes desse Y
. Aqui ilustrado:
$ echo X-RAY THE FOX | perl -lpe 's/(?<=X)/<there>/g'
X<there>-RAY THE FOX<there>
Como -o
, grep
apenas imprime a parte correspondida , é uma maneira de imprimir o que é após o location>
(aqui o que corresponde a [^>]+
: um ou mais ( +
) não <
caracteres ( [^>]
) então tudo até (mas não incluído) o próximo caractere <
ou o final da linha desde que não esteja vazio). / p>
Outra abordagem é usar \K
(em versões mais recentes do PCRE) para redefinir o início da parte correspondente:
grep -Po 'location>\K[^>]+'
Observe que -P
e -o
são extensões do GNU. Com versões recentes (8.11 ou superiores) de pcregrep
(outra implementação grep
que usa o PCRE), você também pode fazer:
pcregrep -o1 'location>([^>]+)'
( -o1
imprime o que é capturado pelo 1 com (aqui exclusivo) (...)
)