Uso de variável no SED [RESOLVIDO]

1. Uso de variável no SED [RESOLVIDO]

Simone dos Santos Araújo
ssaraujo

(usa CentOS)

Enviado em 10/08/2016 - 16:50h

Boa tarde,

Tem um comando que já uso a algum tempo onde busco no log as linhas que iniciam com um determinado termo e jogo em outro arquivo: cat ${logfile} | sed -e /"^OK\:"/\!d > "${ok_tmp_file}"

Agora, em um novo projeto, preciso trocar o termo de busca, a palavra 'OK' por uma variável, pois serão criados arquivos de acordo com termos de uma lista. Tentei de várias maneiras, mas só consegui erros de execução e o comando buscar o nome da variável ao invés do valor representado, e como resultado tenho arquivos vazios. cat ${logfile} | sed -e /'^${CONTR}\:'/\!d > "${ok_tmp_file}"

Esgotei minhas tentativas e já não consigo novos resultados em buscas no google. Preciso de ajuda.

Att,

Simone


  


2. Re: Uso de variável no SED

Perfil removido
removido

(usa Nenhuma)

Enviado em 10/08/2016 - 17:26h

ssaraujo escreveu:

Boa tarde,

Tem um comando que já uso a algum tempo onde busco no log as linhas que iniciam com um determinado termo e jogo em outro arquivo: cat ${logfile} | sed -e /"^OK\:"/\!d > "${ok_tmp_file}"

Agora, em um novo projeto, preciso trocar o termo de busca, a palavra 'OK' por uma variável, pois serão criados arquivos de acordo com termos de uma lista. Tentei de várias maneiras, mas só consegui erros de execução e o comando buscar o nome da variável ao invés do valor representado, e como resultado tenho arquivos vazios. cat ${logfile} | sed -e /'^${CONTR}\:'/\!d > "${ok_tmp_file}"

Esgotei minhas tentativas e já não consigo novos resultados em buscas no google. Preciso de ajuda.

Att,

Simone


Nunca use apóstrofos '' para uma variável no bash ou sh e sim aspas " "


3. Re: Uso de variável no SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/08/2016 - 19:52h

ssaraujo escreveu:

Boa tarde,

Tem um comando que já uso a algum tempo onde busco no log as linhas que iniciam com um determinado termo e jogo em outro arquivo: cat ${logfile} | sed -e /"^OK\:"/\!d > "${ok_tmp_file}"
Agora, em um novo projeto, preciso trocar o termo de busca, a palavra 'OK' por uma variável, pois serão criados arquivos de acordo com termos de uma lista.
Tentei de várias maneiras, mas só consegui erros de execução e o comando buscar o nome da variável ao invés do valor representado, e como resultado tenho arquivos vazios. cat ${logfile} | sed -e /'^${CONTR}\:'/\!d > "${ok_tmp_file}"
Esgotei minhas tentativas e já não consigo novos resultados em buscas no google. Preciso de ajuda.
Att,

Simone


Boa noite Simone.
Para usar variáveis no sed, vc deve:
01 - Usar aspas duplas no comando inteiro, exemplo:
VAR="OK"
sed -n "/^$VAR/p" $logfile > "$ok_tmp_file" 

Ou
2 - Usar aspas simples no comando e na variável, exemplo:
sed -n '/^'$VAR'/p' $logfile > "$ok_tmp_file" 


Ps.:
Note que não usei o "cat" para ler o arquivo e depois direcionar ("pipe") para o sed, não é necessário . . .

Dica: Ótimo material.
http://aurelio.net/sed/ 


Att.:
Marcelo Oliver


4. Uso de variável no SED

Simone dos Santos Araújo
ssaraujo

(usa CentOS)

Enviado em 11/08/2016 - 14:42h

msoliver escreveu:

ssaraujo escreveu:

Boa tarde,

Tem um comando que já uso a algum tempo onde busco no log as linhas que iniciam com um determinado termo e jogo em outro arquivo: cat ${logfile} | sed -e /"^OK\:"/\!d > "${ok_tmp_file}"
Agora, em um novo projeto, preciso trocar o termo de busca, a palavra 'OK' por uma variável, pois serão criados arquivos de acordo com termos de uma lista.
Tentei de várias maneiras, mas só consegui erros de execução e o comando buscar o nome da variável ao invés do valor representado, e como resultado tenho arquivos vazios. cat ${logfile} | sed -e /'^${CONTR}\:'/\!d > "${ok_tmp_file}"
Esgotei minhas tentativas e já não consigo novos resultados em buscas no google. Preciso de ajuda.
Att,

Simone


Boa noite Simone.
Para usar variáveis no sed, vc deve:
01 - Usar aspas duplas no comando inteiro, exemplo:
VAR="OK"
sed -n "/^$VAR/p" $logfile > "$ok_tmp_file" 

Ou
2 - Usar aspas simples no comando e na variável, exemplo:
sed -n '/^'$VAR'/p' $logfile > "$ok_tmp_file" 


Ps.:
Note que não usei o "cat" para ler o arquivo e depois direcionar ("pipe") para o sed, não é necessário . . .

Dica: Ótimo material.
http://aurelio.net/sed/ 


Att.:
Marcelo Oliver


Pessoal,

Percebi que a variável estava vindo com espaços, então primeiramente eu limpei usando:
newVar=$(echo $oldVar| tr -dc '[:print:]\n')

E depois usei a primeira opção de comandos que tentei:
cat ${logfile} | sed -e /'^'$contratos'\:/'\!d > "${ok_tmp_file}"

Finalmente funcionou.

Obrigada pelas dicas :)

Att,

Simone








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts