grep 正確な文字列変数

grep 正確な文字列変数

ファイル「aaa.log」とその内容から、正確な文字列「CAAJ」を grep で検索したいです。

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

期待される出力:

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

次のコードを試しています。そして、O/p を取得します。

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

CAAJ:dd20gf:acldx009:rel7

CAAJ:dd20gi:acldx009:rel7

CAAJ:dd20gp:acldx0059:rel7

しかし、正確な文字列の代わりに変数を使用すると、O/pを取得できません。

var=CAAJ

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

OR 

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

どれも機能しませんでした。

正確な文字列の代わりに変数を使用して、目的のo/pを取得したい

答え1

これを試して..

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

awk で変数を使用する

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

grep コマンド

grep "^$var:" aaa.log

答え2

まず第一に、私はあなたが何を考える括弧は機能していますが、 を使用する理由はまったくありません(^|)。これは「文字列の先頭、または何もない」という意味です。これが有効な構文であることに驚きました。

同様に、(:|$)あなたが関心のある出来事がすべて同時に起こると、始める文字列の。

変数を二重引用符で囲むと展開されます。一重引用符で囲むと展開されません。

これには拡張正規表現は必要ありません。


の代わりに:

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

使用:

grep ^CAAJ: aaa.log

または:

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

または、必要なフィールド区切り文字は なので:、Awk を使用します。

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

この最後のケースでは、一重引用符はシェル用、二重引用符は Awk 用で$1あることに注意してください。 を含む一重引用符内のすべては、そのまま Awk に渡されます。

答え3

これを試して:

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

答え4

試す

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

関連情報