Substituir todas as palavras ou expressões (inteiras) que contenham determinado caracter [RESOLVIDO

1. Substituir todas as palavras ou expressões (inteiras) que contenham determinado caracter [RESOLVIDO

Fabiano de Oliveira Faria
FabianoFaria

(usa Ubuntu)

Enviado em 31/03/2017 - 12:31h

Olá,
Estou tentando montar um script com o sed onde vou ler um arquivo e a partir deste, gerar um novo arquivo, manipulando partes do texto.
Uma das coisas que gostaria de fazer é substituir determinadas expressões (variáveis) que contenham o caractere "&" por outra expressão. Exemplos:
&aCodPro por "+aCodPro+"
&aCodFil por "+aCodFil+"
Na pratica eu estou removendo o &, acrescentando "+ e +" a expressão.

Se for possível aprofundar ainda mais, gostaria que quando alguma variável estiver na posição de última expressão de uma linha (vale para todas as ocorrências do texto nesta posição), que ficasse assim:

&aCodPro por "+aCodPro+;
&aCodFil por "+aCodFil+;

Exemplo completo:
&aCodFil = 1 AND &aCodPro = 16 OR &aCodPro = &aCodPro
Após a mudança:
"+aCodFil+" = 1 AND "+aCodPro+" = 16 OR "+aCodPro+" = "+aCodPro+;

Ou seja a expressão só vai terminar com ";" quando estiver na posição de última expressão da linha.

Grato!


  


2. Re: Substituir todas as palavras ou expressões (inteiras) que contenham determinado caracter [RESOLVIDO

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/03/2017 - 14:02h

FabianoFaria escreveu:

Olá,
Estou tentando montar um script com o sed onde vou ler um arquivo e a partir deste, gerar um novo arquivo, manipulando partes do texto.
Uma das coisas que gostaria de fazer é substituir determinadas expressões (variáveis) que contenham o caractere "&" por outra expressão. Exemplos:
&aCodPro por "+aCodPro+"
&aCodFil por "+aCodFil+"
Na pratica eu estou removendo o &, acrescentando "+ e +" a expressão.

Se for possível aprofundar ainda mais, gostaria que quando alguma variável estiver na posição de última expressão de uma linha (vale para todas as ocorrências do texto nesta posição), que ficasse assim:

&aCodPro por "+aCodPro+;
&aCodFil por "+aCodFil+;

Exemplo completo:
&aCodFil = 1 AND &aCodPro = 16 OR &aCodPro = &aCodPro
Após a mudança:
"+aCodFil+" = 1 AND "+aCodPro+" = 16 OR "+aCodPro+" = "+aCodPro+;

Ou seja a expressão só vai terminar com ";" quando estiver na posição de última expressão da linha.

Grato!


Boa tarde.
Segue sugestão:
echo "&aCodFil = 1 AND &aCodPro = 16 OR &aCodPro = &aCodPro"|sed 's/\(&aCod...\)/\"+&+\"/g;s/&//g;s/$/\;/' 

"+aCodFil+" = 1 AND "+aCodPro+" = 16 OR "+aCodPro+" = "+aCodPro+";

marcelo oliver



3. Re: Substituir todas as palavras ou expressões (inteiras) que contenham determinado caracter

Fabiano de Oliveira Faria
FabianoFaria

(usa Ubuntu)

Enviado em 31/03/2017 - 15:30h

Caro Marcelo,

Obrigado pela resposta.

Infelizmente acho que esta solução não seria adequada, mas a culpa é minha que não dei mais detalhes.

O arquivo que eu estou convertendo é um arquivo sql e as variáveis estão por todo o arquivo, em várias linhas e posições diferentes. O fato é que são várias variáveis (&CodPro, &CodDer, &TipVda, &TipRel, &NumPed, ...) e a princípio eu não sei quais estão no arquivo e em que posição. A única coisa que tenho para definir que são variáveis é o caractere "&".

Um exemplo resumido de parte do texto de um arquivo destes seria algo como:

SELECT
CodFil,
Codpro,
CodDer,
CASE TipVda WHEN 1 THEN 'Pronta Entrega'
WHEN 2 THEN 'Programada'
END AS TipVda
FROM tabela
WHERE
CodFil = &Codfil
AND (Codpro = &aCodPro OR &aCodPro IS NULL)
AND (CodDer = &aCodDer OR &aCodDer IS NULL)
...


4. Re: Substituir todas as palavras ou expressões (inteiras) que contenham determinado caracter [RESOLVIDO

Fabiano de Oliveira Faria
FabianoFaria

(usa Ubuntu)

Enviado em 31/03/2017 - 16:10h

Fui apressado Marcelo,

Na verdade funciona perfeitamente. Agradeço demais pela ajuda.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts