grep 精確字串變數

grep 精確字串變數

我想從文件“aaa.log”及其後面的內容中 grep 確切的字串“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

我正在嘗試以下程式碼。

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

請注意,在最後一種情況下,單引號用於 shell,雙引號用於 Awk。單引號內的所有內容(包括$1)都將以原樣傳遞給 Awk。

答案3

嘗試這個:

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

答案4

嘗試

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

相關內容