ファイル「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