我想从文件“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
我正在尝试以下代码。我得到了 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
请注意,在最后一种情况下,单引号用于 shell,双引号用于 Awk。单引号内的所有内容(包括$1
)都将按原样传递给 Awk。
答案3
尝试这个:
var=CAAJ;grep "^$var:" aaa.log;
答案4
尝试
grep -E "(^|)${var}(:|$)" aaa.log