Answers:
只需指定regexp锚。
grep '^ABB\.log$' a.tmp
sed -r "s/^(.*)$/^\1$/" patterns.txt | egrep -f - a.tmp
grep -Fx ABB.log a.tmp
从grep手册页:
-F,--fixed-strings将
PATTERN解释为固定字符串的(列表)
-x,--
line -regexp仅选择与整行完全匹配的那些匹配项。
-F
?您在Solaris上吗?如果需要,请使用/usr/xpg4/bin/grep
grep
bash脚本中使用,并且此选项比接受的答案中建议的使用正则表达式更好。因为我在要搜索的变量中有一些特殊字符(例如.
),所以在使用命令时不必转义它们。
这是我的工作,尽管使用锚点是最好的方法:
grep -w "ABB.log " a.tmp
ABB.log
加上一个空格,这不是通常的情况,即,大多数情况下它将失败。
我打算对OP的尝试以及其他答案进行一些补充说明。
您也可以使用John Kugelmans的解决方案,例如:
grep -x "ABB\.log" a.tmp
引用字符串并转义点(.
)使其不再需要该-F
标志。
您需要转义.
(点)(因为如果不转义,它会与任何字符(不仅是.
)匹配),或者将-F
标志与grep一起使用。-F
标志使它成为固定字符串(不是正则表达式)。
如果不引用字符串,则可能需要使用双反斜杠来转义点(.
):
grep -x ABB\\.log a.tmp
$ echo "ABBElog"|grep -x ABB.log
ABBElog #matched !!!
$ echo "ABBElog"|grep -x "ABB\.log"
#returns empty string, no match
-x
力匹配整条线。.
不带-F
标志的答案是错误的。-x
使用^
和来包装模式字符串,从而避免切换$
。在这种情况下,请确保不要使用-F
,而是转义.
,因为这-F
会阻止^
and 的正则表达式解释$
。如果要匹配以开头的字符串-
,则应--
与grep一起使用。以下内容--
将作为输入(不是选项)。
例:
echo -f |grep -- "-f" # where grep "-f" will show error
echo -f |grep -F -- "-f" # whre grep -F "-f" will show error
grep "pat" -- "-file" # grep "pat" "-file" won't work. -file is the filename
-F
,如果.
正确地逃脱了,为什么不需要。
-F
写这篇文章时有空吗?如果没有,您使用的是哪个系统?到目前为止,我在您的答案中找不到该信息,即使是现在,当我再次阅读该信息时,也是如此。可以肯定的是,我至少读了两次完整的答案。;)
-F
可用。(我确实说过:“或将-F
标记与一起使用grep
”)
-F
是答案,为什么还要逃跑呢?您对此有何看法?
尝试执行类似操作时,这对我来说效果很好:
grep -F ABB.log a.tmp
我需要此功能,但还想确保我没有在ABB.log之前返回带有前缀的行:
grep "\WABB.log$" -w a.tmp
\W
满足前导时(这是任何非空格字符),此属性才匹配xABBxlog
。