\ t string com sed

2

Estou usando o sed para substituir a string "\ UPo" pela string "\ textit {Old (Preferências do usuário)}". O comando que estou usando é:

find /home/rom/Desktop/nodeRemoval/report -name \*.tex -exec sed -i "s/\UPo/\textit{Old (User's preferences)}/g" {} \;

Eu quero escapar das barras invertidas, pois elas são parte da string. Mas em vez de uma barra invertida, me dá uma aba! A saída é: \ [TAB] extit {antigo (preferências do usuário)}

O que há de errado?

Agradecemos antecipadamente

Rom

    
por rom 11.09.2012 / 20:04

1 resposta

2

Como sua expressão está entre aspas duplas, a string é avaliada pelo bash (que substitui \ por \ ). Na verdade, o regex transmitido para o sed parece assim:

s/\UPo/\textit{Old (User's preferences)}/g

Ou escape de cada barra invertida duas vezes:

sed -i "s/\\UPo/\\textit{Old (User's preferences)}/g"

ou, melhor, use aspas simples. Qualquer coisa entre aspas simples não será avaliada pelo bash, mas cuidado: uma única citação pode não aparecer entre aspas simples, então você precisa concluir a aspa simples, escapar aspas simples, começar a aspas simples novamente:

sed -i "s/\UPo/\textit{Old (User'\''s preferences)}/g"

Isso é um pouco bobo, e é por isso que temos o Perl.

    
por January 11.09.2012 / 20:22