grep 正確な文字列変数

grep 正確な文字列変数

「aaa.log」ファイルから正確な文字列「CAAJ」とそれに続く内容を把握したいと思います。

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

関連情報