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