Answers:
只需指定regexp锚。
grep '^ABB\.log$' a.tmpsed -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
                    grepbash脚本中使用,并且此选项比接受的答案中建议的使用正则表达式更好。因为我在要搜索的变量中有一些特殊字符(例如.),所以在使用命令时不必转义它们。
                    这是我的工作,尽管使用锚点是最好的方法:
grep -w "ABB.log " a.tmpABB.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。