variable de cadena exacta grep

variable de cadena exacta grep

Quiero obtener la cadena exacta 'CAAJ' de un archivo "aaa.log" y su siguiente contenido.

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

Rendimiento esperado:

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

Estoy probando el siguiente código y obtengo el O/p.

grep -E '(^|)CAAJ(:|$)' aaa.log

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

Pero cuando uso una variable en lugar de la cadena exacta, no puedo obtener la O/p

var=CAAJ

grep -E '(^|)${var}(:|$)' aaa.log

OR 

grep -E '(^|)"${var}"(:|$)' aaa.log

Ninguno de estos funcionó.

Quiero usar la variable en lugar de la cadena exacta y obtener la operación deseada

Respuesta1

prueba esto..

awk -F: '$1=="CAAJ" aaa.log

usando variables en awk

awk -F: -vv="$var" '$1==v' aaa.log

comando grep

grep "^$var:" aaa.log

Respuesta2

Primero que nada, no tengo idea de lo quepensarlos paréntesis funcionan, pero no hay ninguna razón para usarlos (^|). Eso significa "comienzo de la cadena, o nada". Me sorprende que sea una sintaxis válida.

Del mismo modo, (:|$)parece absurdo cuando todos los sucesos que te interesan ocurren al mismo tiempo.comenzarde la cuerda.

Si pones una variable entre comillas dobles, se expandirá. Si lo pones entre comillas simples, no lo hará.

No necesita expresiones regulares extendidas para nada de esto.


En lugar de:

grep -E '(^|)'${var}'(:|$)'

Usar:

grep ^CAAJ: aaa.log

O:

var=CAAJ
grep "^${var}:" aaa.log

O, dado que el delimitador de campo que le interesa es :, simplemente use Awk:

awk -F: '$1 == "CAAJ"' aaa.log

Tenga en cuenta que en este último caso, las comillas simples son para el shell y las comillas dobles son para Awk. Todo lo que esté dentro de las comillas simples, incluido $1, se pasará a Awk exactamente como está.

Respuesta3

Prueba esto:

var=CAAJ;grep "^$var:" aaa.log;

Respuesta4

intentar

grep -E "(^|)${var}(:|$)" aaa.log

información relacionada