Como substituir aspas em um arquivo com sed?

8

Eu tenho um arquivo que contém várias linhas de xml. Eu gostaria de substituir certas partes do arquivo. Algumas partes do arquivo contêm aspas ( " ) que eu gostaria de substituir. Eu tenho tentado escapar as aspas com \ , mas eu não acho que isso está funcionando com base no resultado do meu arquivo.

Aqui está um exemplo de um dos meus comandos sed:

sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp

É assim que você escapa aspas em um comando sed ou estou fazendo algo errado?

    
por jbranchaud 20.03.2011 / 20:05

2 respostas

8

Duas dicas:

  1. Você não pode escapar de uma única citação dentro de uma string entre aspas simples. Então você tem que fechar a cotação, adicionar uma cotação de escape, em seguida, abra as aspas novamente. Ou seja: 'foo'\''bar' , que é dividido como:

    • 'foo' cotado foo
    • \' escape '
    • 'bar' cotado bar

    rendendo foo'bar .

  2. (opcional) Você não precisa necessariamente usar / in sed. Acho que usar / e \ na mesma expressão sed dificulta a leitura.

Por exemplo, para remover as aspas deste arquivo:

$ cat /tmp/f
aaa"bbb"'ccc'aaa

Considerando minhas duas dicas acima, o comando que você pode usar para remover aspas duplas e simples é:

$ sed -e 's|["'\'']||g'  /tmp/f

Com base na minha primeira dica, o shell reduz o segundo argumento do sed (isto é, a string após o -e ) para s|["']||g e passa essa string para sed. Com base na minha segunda dica, o sed trata o mesmo que s/['"]//g . Isso significa

remove all characters matching either ' or "   (i.e., replace them with nothing)

Você provavelmente precisa de algo mais complexo do que isso para fazer o que quiser, mas é um começo. Espero que ajude.

    
por 20.03.2011 / 22:21
0

Eu tenho uma porta do Windows de utilitários unix para comandos parecer um pouco diferente, mas eu tinha um arquivo csv com vírgulas e aspas. Usando este encadeamento como guia, consegui remover as aspas por meio deste comando:

c:\Temp> cat report.csv | sed "s/\,/\ /g" | sed "s/[""]//g"
    
por 27.07.2017 / 15:56

Tags