como chamar variáveis dentro do comando sed

0

Quero obter a contagem do número de registros na última 1 hora

meu código está abaixo

nowdate=$(date +'%H:%M:')
pastdate=$(date +'%H:%M:' -d "1 hour ago")

echo $nowdate
echo $pastdate

sed -rne '/"'"$pastdate"'"/,/"'"$nowdate"'"/p' /data/recvdmsg.log | wc -l

saída que estou recebendo é,

12:47:
11:47:
0

Além disso, isso funciona bem com valores predefinidos como este

sed -rne '/00:00:/,/00:59:/p' /data/recvdmsg.log | wc -l

Eu quero chamar minha variável $nowdate , $pastdate dentro do comando sed.

    
por Prabash 29.12.2017 / 09:18

2 respostas

0

Você coloca em sua declaração muitas citações. Deve funcionar bem assim:

sed -rne "/$pastdate/,/$nowdate/p" /data/recvdmsg.log | wc -l

Ou desta forma, se você ainda quiser usar aspas simples:

sed -rne '/'$pastdate'/,/'$nowdate'/p' /data/recvdmsg.log | wc -l

Lembre-se de que, caso haja / de caracteres em sua variável, ela quebrará sed expressão.

Se você quiser filtrar esses registros ainda mais, você pode fazer isso em Sed ao invés de adicionar grep no final:

sed -rne "/$pastdate/,/$nowdate/ { /pattern-to-grep-for/p; }" /data/recvdmsg.log

(Espaços são para legibilidade; eles não são obrigatórios.)

    
por 29.12.2017 / 09:21
1

Embora este seja um comentário geral em vez de uma resposta específica, eu estou postando como uma resposta porque pode ajudar a OP com o problema subjacente de ver o que está errado com a expansão.

Quando você está compondo argumentos que dependem de expansão, e você quer saber como será o argumento expandido, então apenas echo it.

Se você olhar a saída de

echo '/"'"$pastdate"'"/,/"'"$nowdate"'"/p'
/"12:36:"/,/"13:36:"/p

Então você pode ver que o problema é a cotação

    
por 29.12.2017 / 10:52