Como remover string seguindo uma palavra específica

2

Estou tentando remover uma string que começa com uma palavra específica no meu arquivo de manifesto. O arquivo contendo linhas se parece com:

<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" **publicKeyToken="1fc8b3b9a1e18e3b**"></assemblyIdentity>

Eu quero remover publicKeyToken="1fc8b3b9a1e18e3b" dele.

Eu fiz: sed -e "s/publicKeyToken=\"[0-9]*[a-z]*\*//g" , mas nada é alterado. Eu não posso usar publicKeyToken="1fc8b3b9a1e18e3b" para substituir, porque o conteúdo entre o "" pode mudar.

Alguém sabe o caminho certo para fazer isso?

    
por user1558064 08.05.2015 / 23:16

2 respostas

3

Ao usar o comando Sed, você precisa de -i para alterar o arquivo. Sem você, o -i será impresso no stdout e você poderá verificar se o comando funcionará para você.

tente sed -i "s/publicKeyToken=\"[0-9][a-z]*//g"

Além disso, há um comando para excluir uma linha que começa com algo. se você quiser apagar a linha publicKeyToken você pode usar

sed -i '/pattern to match/d' ./infile ou seja, sed -i '/publicKey/d' yourfile.text Este site tem uma boa ajuda sobre o que os comandos fazem, Ajuda Sed

Veja também Resposta de estouro de pilha para excluir a linha

    
por 08.05.2015 / 23:32
2

Eu não aconselho você a usar o regex para manipular XML. Existem outras ferramentas que podem ajudá-lo melhor do que o sed , pelo menos para esta instância. Uma dessas ferramentas é o excelente kit de ferramentas XMLStarlet . Está disponível no Windows, Linux e MacOS.

Dito isto, se você ainda quiser continuar usando sed , então uma coisa que eu vejo imediatamente que está causando o problema é este bit aqui: [0-9]*[a-z]* . Ele corresponde apenas ao texto que começa com zero ou mais números seguidos por zero ou mais letras. O que você precisa é de [0-9a-f]{16} .

Dê uma olhada nestes sandboxes Regex. Eles são ótimos para testar seu regex:

link

link

link

por 08.05.2015 / 23:37

Tags