「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