Eu tenho um arquivo que contém várias linhas de xml. Gostaria de substituir certas partes do arquivo. Algumas partes do arquivo contêm aspas ( "
) que eu gostaria de substituir. Eu tenho tentado escapar das aspas com \
, mas não acho que isso esteja 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?
"text"
por'text'
. Claro que não fará nada para"othertext"
. Mostre algumas linhas de entrada, a saída indesejada correspondente e explique qual saída você deseja.\"
é a maneira correta de escapar aspas no comando sed?"
. Mas seu comando shell usa uma cadeia de caracteres entre aspas duplas e\"
está correto lá. Osed
programa vês/"text"/'text'/ig
como argumento para-e
.s/\"text\" /'text'/ig
, encontraria apenas"text"
o espaço após ele?sed
é a ferramenta certa para o trabalho, talvez você queira um analisador XML.Respostas:
Duas dicas:
Você não pode escapar de uma única citação dentro de uma sequência entre aspas simples. Portanto, você deve fechar a cotação, adicionar uma cotação de escape e abrir as aspas novamente. Ou seja
'foo'\''bar'
:, que se divide em:'foo'
citadofoo
\'
escapou'
'bar'
citadobar
cedendo
foo'bar
./
sed. Acho que usar/
e\
na mesma expressão sed torna difícil de ler.Por exemplo, para remover as aspas deste arquivo:
Dadas minhas duas dicas acima, o comando que você pode usar para remover aspas duplas e simples é:
Com base na minha primeira dica, o shell reduz o segundo argumento do sed (ou seja, a sequência após a
-e
)s|["']||g
e passa a sequência para sed. Com base na minha segunda dica, sed trata da mesma forma ques/['"]//g
. Isso significaVocê provavelmente precisa de algo mais complexo do que isso para fazer o que deseja, mas é um começo.
fonte
'foo'\''bar'
usarmos'foo'"'"'bar'
.Eu tenho uma porta Windows de utilitários unix, então os comandos parecem um pouco diferentes, mas eu tinha um arquivo csv com vírgulas e aspas. Usando este tópico como guia, consegui remover as aspas por meio deste comando:
fonte