Quero obter a string exata 'CAAJ' de um arquivo "aaa.log" e o conteúdo a seguir.
cat aaa.log
CAAJ:dd20gf:acldx009:rel7
CAAJ:dd20gi:acldx009:rel7
CAAJ:dd20gp:acldx0059:rel7
CAAJ-TEST:de27ff:acldx003:rel7
CAAJ-TEST:de27ei:acldx003:rel7
CAAJ-TEST:de27ep:acldx003:rel7
Resultado esperado:
CAAJ:dd20gf:acldx009:rel7
CAAJ:dd20gi:acldx009:rel7
CAAJ:dd20gp:acldx0059:rel7
Estou tentando o seguinte código. E recebo o O/p.
grep -E '(^|)CAAJ(:|$)' aaa.log
CAAJ:dd20gf:acldx009:rel7
CAAJ:dd20gi:acldx009:rel7
CAAJ:dd20gp:acldx0059:rel7
Mas quando uso uma variável em vez da string exata, não consigo obter o O/p
var=CAAJ
grep -E '(^|)${var}(:|$)' aaa.log
OR
grep -E '(^|)"${var}"(:|$)' aaa.log
Nada disso funcionou.
Quero usar a variável em vez da string exata e obter o o/p desejado
Responder1
tente isso..
awk -F: '$1=="CAAJ" aaa.log
usando variável no awk
awk -F: -vv="$var" '$1==v' aaa.log
comando grep
grep "^$var:" aaa.log
Responder2
Em primeiro lugar, não tenho ideia do que vocêpensaros parênteses estão funcionando, mas não há razão alguma para usar (^|)
. Isso significa "início da string ou nada". Estou surpreso que seja uma sintaxe válida.
Da mesma forma, (:|$)
parece sem sentido quando todas as ocorrências que lhe interessam ocorrem ao mesmo tempo.começarda corda.
Se você colocar uma variável entre aspas duplas, ela será expandida. Se você colocar entre aspas simples, isso não acontecerá.
Você não precisa de regex estendido para nada disso.
Em vez de:
grep -E '(^|)'${var}'(:|$)'
Usar:
grep ^CAAJ: aaa.log
Ou:
var=CAAJ
grep "^${var}:" aaa.log
Ou, como o delimitador de campo de seu interesse é :
, basta usar Awk:
awk -F: '$1 == "CAAJ"' aaa.log
Observe que neste último caso, as aspas simples são para o shell e as aspas duplas são para o Awk. Tudo dentro das aspas simples, incluindo $1
, será passado para o Awk exatamente como está.
Responder3
Experimente isto:
var=CAAJ;grep "^$var:" aaa.log;
Responder4
tentar
grep -E "(^|)${var}(:|$)" aaa.log