leia a regex:
$ echo 'sdnfasdnbfas;jdfnba;ldjfnb;asdf[MESG: I NEED THIS: 1] adsfasdfasdfasdfasdf' | grep -Eo '\[.*\]'
[MESG: I NEED THIS: 1]
$
Eu tenho um arquivo. Este arquivo contém strings como
sdnfasdnbfas;jdfnba;ldjfnb;asdf[MESG: I NEED THIS: 1] adsfasdfasdfasdfasdf
sdnfasdnbfas;jdfnba;ldjfnb;asdf[MESG: I NEED THIS: 2] adsfasdfasdfasdfasdf
sdnfasdnbfas;jdfnba;ldjfnb;asdf[MESG: I NEED THIS: 3] adsfasdfasdfasdfasdf
Como posso usar "grep" para obter uma saída como:
MESG: I NEED THIS: 1
MESG: I NEED THIS: 2
MESG: I NEED THIS: 3
leia a regex:
$ echo 'sdnfasdnbfas;jdfnba;ldjfnb;asdf[MESG: I NEED THIS: 1] adsfasdfasdfasdfasdf' | grep -Eo '\[.*\]'
[MESG: I NEED THIS: 1]
$
Obrigado pela ajuda rápida. Infelizmente estou correndo -ash e uma pequena solução foi necessária. Eu corrijo meu problema executando:
grep -o "\w*[MESG: I NEED THIS: 1]\w*"
Agora eu gostaria de dar algo de volta para a comunidade. Como eu corrijo meu pequeno problema, compartilharei um script genérico para monitorar um determinado arquivo depois de várias strings e agir de acordo.
## This is a generic script to monitor a file for multiple strings and
## act accordingly.
while true
do
grep -o "\w*[MESG: I NEED THIS: 1]\w*" /don/key | grep '[MESG: I NEED THIS: 1]' &> /dev/null
if [ $? == 0 ];
then
echo "matched 1"
else
echo "not matched 1"
fi
grep -o "\w*[MESG: I NEED THIS: 2]\w*" /don/key | grep '[MESG: I NEED THIS: 2]' &> /dev/null
if [ $? == 0 ];
then
echo "matched 2"
else
echo "not matched 2"
fi
grep -o "\w*[MESG: I NEED THIS: 3]\w*" /don/key | grep '[MESG: I NEED THIS: 3]' &> /dev/null
if [ $? == 0 ];
then
echo "matched 3"
else
echo "not matched 3"
fi
sleep 3
done
Espero que ajude alguém.
Analisando sua própria resposta a essa pergunta , aqui está uma sugestão:
for number in 1 2 3; do
string="[MESG: I NEED THIS: $number]"
if grep -qF "$string" /don/key; then
printf 'Matched %d\n' "$number"
else
printf 'Did not match %d\n' "$number"
fi
done
Observe que, se você quiser corresponder uma string fixa (não uma expressão regular), use -F
with grep
. Se você não usa -F
, você terá que escapar de quaisquer caracteres especiais em expressões regulares (neste caso, [
e ]
).
O -q
impede que grep
produza qualquer saída. Não estamos interessados na saída, apenas se corresponder ou não.
A expressão regular [MESG: I NEED THIS: 1]
corresponde exatamente a um caractere do conjunto de caracteres dentro do [...]
, que não é o que você deseja.
Tags grep