grep exakte Zeichenfolgenvariable

grep exakte Zeichenfolgenvariable

Ich möchte die genaue Zeichenfolge „CAAJ“ aus einer Datei „aaa.log“ und ihrem folgenden Inhalt greppen.

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

Erwartete Ausgabe:

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

Ich versuche den folgenden Code und bekomme das O/p.

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

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

Aber wenn ich eine Variable anstelle der genauen Zeichenfolge verwende, kann ich das O/p nicht abrufen

var=CAAJ

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

OR 

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

Nichts davon hat funktioniert.

Ich möchte die Variable anstelle der genauen Zeichenfolge verwenden und das gewünschte o/p erhalten

Antwort1

Versuche dies..

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

Verwenden von Variablen in Awk

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

grep-Befehl

grep "^$var:" aaa.log

Antwort2

Erstens habe ich keine Ahnung, was Siedenkendie Klammern tun das, aber es gibt überhaupt keinen Grund, zu verwenden (^|). Das bedeutet „Anfang der Zeichenfolge oder nichts“. Ich bin überrascht, dass es eine gültige Syntax ist.

Ebenso (:|$)erscheint es sinnlos, wenn alle Ereignisse, die Sie interessieren, zur gleichen Zeit stattfinden.Startder Zeichenfolge.

Wenn Sie eine Variable in doppelte Anführungszeichen setzen, wird sie erweitert. Wenn Sie sie in einfache Anführungszeichen setzen, wird dies nicht der Fall.

Sie benötigen hierfür keinen erweiterten regulären Ausdruck.


Anstatt:

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

Verwenden:

grep ^CAAJ: aaa.log

Oder:

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

:Oder verwenden Sie einfach Awk , da für Sie das Feldtrennzeichen relevant ist :

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

Beachten Sie, dass in diesem letzten Fall die einfachen Anführungszeichen für die Shell und die doppelten Anführungszeichen für Awk stehen. Alles innerhalb der einfachen Anführungszeichen, einschließlich $1, wird genau so an Awk übergeben, wie es ist.

Antwort3

Versuche dies:

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

Antwort4

versuchen

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

verwandte Informationen