Me gustaría utilizar sed para eliminar todos los caracteres entre «foo=1&» y «bar=2&» todas las repeticiones en un archivo xml.

<url>http://example.com?addr=123&foo=1&s=alkjasldkffjskdk$bar=2&f=jkdng</url>
<url>http://example.com?addr=124&foo=1&k=d93ndkdisnskiisndjdjdj$bar=2&p=dnsks</url>

Aquí es mi comando sed:

sed -e '/foo=1&/,/bar=2&/d' sample.xml

Cuando ejecuto esto, el archivo no se ha cambiado.

La anterior se basa en este ejemplo: Encontrar «cadena1» y eliminar entre eso y «texto2»

  • Sí. Al añadir el parámetro-i, termino con un archivo vacío
  • Este podría ser necesario se trasladó a la de Linux / Unix stackexchange.
InformationsquelleAutor Sparky1 | 2013-10-04

2 Comentarios

  1. 7

    Utilizar el sustitución de comandos en lugar de la eliminar comando:

    sed -e 's/\(foo=1&\).*\(bar=2&\)//'
    • Que funciona de maravilla! Muchas gracias.
    • Que parecía trabajar para mí también, pero por favor puede explicar exactamente lo que el comando está haciendo?
    • s/regex/replacement/ reemplaza el primer partido de regex en cada línea con replacement. regex puede contener grupos, y estos grupos puede ser referenciado con \1, \2, etc. Esta función no es estrictamente necesario en este caso, y usted podría usar s/foo=1&.*bar=2&/foo=1&bar=2&/ lugar.
    • Y qué pasa si hay varios bar=2& en la cadena? Debido a que este código se lee hasta la última
  2. 2

    Debe utilizar

     sed -i -e 's/\(foo=1&\).*\(bar=2&\)//' your_html.xml
    • He intentado esto .. no trabajo Anterior respuesta por nosid está trabajando muy bien
    • tal vez la versión de sed es diferente

Dejar respuesta

Please enter your comment!
Please enter your name here