Sed: procura e substitui um patten com caracteres especiais que tem uma cadeia arbitrária entre

1

Eu tenho uma carga de arquivos nfo que eu quero fazer algumas substituições globais para alguns valores dentro de cada arquivo

por exemplo,

   a.nfo has the value <set>Tonight&apos;s Menu ( June 2012 )</set>
   b.nfo has the value <set>Tonight&apos;s Menu ( April 2012 )</set>
   c.nfo has the value <set>Speciel Menu ( April 2012 )</set>

Que eu quero fazer com que todos tenham o mesmo valor.

   a.nfo has the value <set>Tonight&apos;s Menu</set>
   b.nfo has the value <set>Tonight&apos;s Menu</set>
   c.nfo has the value <set>Tonight&apos;s Menu</set>

Eu tenho esse código que está quase funcionando, mas não exatamente

    find -name '*.nfo' -print -exec sed -i.bak "s@\(<set>\).*\(</set>\)@Tonight&apos;s Menu@" {} \;

no momento em que o resultado é

      <set>Tonight<set>Tonight&apos;s Menu ( June 2012 )</set>apos;s Menu</set>
    
por user3217458 11.02.2014 / 20:34

1 resposta

2

Correspondendo o texto entre <set> e o seguinte < . A barra invertida é necessária para remover o significado especial de & para sed.

 sed 's/<set>.*</<set>Tonight\&apos;s Menu</' yourfile
    
por 11.02.2014 / 20:41