如果整行匹配,如何使grep只匹配?

Joh*_*nyy 95 unix shell grep

我有这些:

$ cat a.tmp
ABB.log
ABB.log.122
ABB.log.123
Run Code Online (Sandbox Code Playgroud)

我想找到ABB.log的精确匹配.

但是当我这样做的时候

$ grep -w ABB.log a.tmp
ABB.log
ABB.log.122
ABB.log.123
Run Code Online (Sandbox Code Playgroud)

它显示了所有这些.

我可以用grep获得我想要的东西吗?

Joh*_*ica 141

grep -Fx ABB.log a.tmp
Run Code Online (Sandbox Code Playgroud)

从grep手册页:

-F, - fixed-strings将
PATTERN解释为(固定字符串)列表
-x, -
line -regexp仅选择与整行完全匹配的匹配项.

  • 我在bash脚本中使用`grep`,这个选项比使用接受答案中建议的正则表达式更好.因为我在我正在搜索的变量中有一些特殊字符(比如`.`),所以在使用命令时我不必逃避它们. (6认同)
  • 最佳答案 IMO,因为它允许特殊字符而无需转义 (3认同)
  • 不幸的是,我无法使用-F. (2认同)
  • 这更好,因为它也适用于变量。 (2认同)

use*_*374 96

只需指定正则表达式锚点即可.

grep '^ABB\.log$' a.tmp
Run Code Online (Sandbox Code Playgroud)

  • 两个锚点(^和$)都是必需的. (2认同)
  • 好一个!如果我正在使用正则表达式从文件匹配?"grep -f patterns a.tmp"?? (2认同)

小智 23

这是我的工作,虽然使用锚点是最好的方法:

grep -w "ABB.log " a.tmp
Run Code Online (Sandbox Code Playgroud)