usando sed com oe comercial (&)

15

Estou usando o sed para encontrar e substituir padrões nos arquivos SAS que tenho, em vez de alterá-los individualmente. O problema é que eu estou tentando substituir variáveis de macro e quando eu uso o E comercial não está processando corretamente.

Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas

sempre que executo este comando, ele parece anexar e fazer todos os tipos de coisas interessantes com o texto original.

Pergunta: Como eu substituo o texto que contém o E comercial com o comando sed?

    
por lucasdavis500 18.07.2016 / 21:59

1 resposta

18

& é especial no texto de substituição: significa “a parte inteira da entrada que foi correspondida pelo padrão”, então o que você está fazendo aqui substitui user=&uidX por user=user=&uidXsysuserid. . Para inserir um e comercial real no texto de substituição, use \& .

Outra coisa que parece errada é que . no padrão de pesquisa representa qualquer caractere (exceto uma nova linha), mas o . no final do texto de substituição é um ponto literal. Se você quiser substituir somente a string literal user=&uid. , proteja o . com uma barra invertida.

sed -e 's/user=&uid\./user=\&sysuserid./g'

Se você quiser substituir qualquer caractere e preservá-lo no resultado, coloque o caractere em um grupo e use na substituição para se referir a esse grupo.

sed -e 's/user=&uid\(.\)/user=\&sysuserid/g'

Na verdade, dada a repetição entre o texto original e a substituição, você deve usar grupos de qualquer maneira:

sed -e 's/\(user=&\)u\(id\.\)/sysuser/g'

i.e. "Substitua u por sysuser entre user=& e id. ".

    
por 19.07.2016 / 02:19