Como localizar e substituir uma string específica em uma linha específica

1

Eu desenvolvi um código que localiza e substitui uma string específica em todos os xmls em todos os subdiretórios. Mas eu não quero que todas as ocorrências sejam substituídas. Em todo o xml, o código deve encontrar a tag xyz e substituir xyz nessa tag por abc. Outro "xyz" no xml deve permanecer como está. Você pode por favor me ajudar com isso.

Obrigado ...

    
por daisy 17.02.2013 / 10:23

2 respostas

4

Você pode usar sed para o mesmo

sed -i.bkp  5'i'"s/search/replace/"  inputfile
  • -i.bkp faça backup como inpufile.bkp e edite o arquivo original
  • 5'i 'vai para a linha 5
  • s / pesquisar e substituir

você também pode pesquisar palavras específicas dizendo "NAME" e na mesma linha pesquisar "RAM" e substituir por "SHYAM", veja o exemplo abaixo

sed -e '/NAME/s/RAM/SHYAM/g' filename

referência link

    
por 17.02.2013 / 10:57
1

Como mencionado por @donothings, modificar o xml com simples substituição de texto quando você tem requisitos como tag xyz dentro da tag abc é geralmente um idéia ruim a menos que você tenha um formato muito restrito e conhecido do arquivo xml de entrada, o que raramente é o caso. Você precisa de algo que entenda xml.

xml-sed de xml-coreutils permite que você execute comandos sed em uma" echo-leaf "em vez de uma linha que significa basicamente sed em um fragmento xml com um PATH. Então você teria algo como

xml-sed 's/oldstring/newsting/' file.xml :/abc/xyz

Python lxml ou Perl XML :: Twig pode ser usado se você puder fazer o script.

    
por 17.02.2013 / 14:30