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