
A continuación se muestra el contenido de mi archivo,
<A>
<number>100</number>
<name>Word1</name>
</A>
<A>
<number>101</number>
<name> Word2</name>
</A>
Si busco Word1
, estoy tratando de ver el resultado como se muestra a continuación,
<A>
<number>100</number>
<name>Word1</name>
</A>
Si busco Word2
, estoy tratando de ver el resultado como se muestra a continuación,
<A>
<number>101</number>
<name>Word2</name>
</A>
¿Alguien podría ayudar con esto, por favor?
Respuesta1
Si esto es parte de un documento XML bien formado, puede extraer la parte requerida con un analizador XML.
Para satisfacer elbien formadorequisito, he envuelto su fragmento XML con <root>
y </root>
.
xmlstarlet sel -t -c '//A[name="Word1"]' -n file.xml
Si no puede satisfacer esto directamente, puede envolverlo explícitamente
( echo '<root>'; cat file.xml; echo '</root>' ) | xmlstarlet sel -t -c '//A[name="Word1"]' -n
En cualquier caso, el resultado es este:
<A>
<number>100</number>
<name>Word1</name>
</A>
Respuesta2
Con pcregrep
:
<file.xml pcregrep -Mo '(?s)<A>(?:.(?!</A>))*Word1.*?</A>'
Con GNU grep
:
<file.xml grep -zPo '(?s)<A>(?:.(?!</A>))*Word1.*?</A>' | tr '\0' '\n'
(aunque eso significa que todo el archivo está cargado en la memoria y se supone que no contiene bytes NUL).
Algunos operadores PCRE:
(?s)
enciende las
bandera (.
coincide con delimitadores de líneas pares).(?!</A>)
cualquier carácter siempre que no esté al comienzo de</A>
..*?
versión no codiciosa de.*
(:...)
simplemente agrupando.
Se deja engañar por cosas como <![CDATA[</A>]]>
o no encontraría un Word2
expresado como <![CDATA[W]]>ord2>
o Word2
para el cual necesitaría un analizador XML. Pero entonces un analizador XML necesitaría una entrada XML válida, que su muestra no es a menos que la incluya en un elemento de nivel superior, necesitaría leer el archivo en su totalidad (pero, de nuevo, eso generalmente le corresponde cuando trabaja con ese formato) y transformar potencialmente el contenido (ampliar las <![CDATA
y algunas &...;
secuencias). Y una expresión xpath haría difícil encontrarlas Word1
en cualquier lugar, incluidos comentarios o etiquetas o atributos XML.