我想從文件“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