3

在尝试 grep 查找其中包含点的字符串时,我无法获得精确匹配的字符串作为输出。

例如:grep "APPLICATION.REFERENCE.LOCAL" <FILENAME>

我什至尝试过:

grep -F 'APPLICATION.REFERENCE.LOCAL' <FILENAME>它还显示具有类似匹配项的行,例如APPLICATION.REFERENCE.LOCAL1.

请帮我。

4

3 回答 3

7

由于您使用-Fwhich 会将模式解释为固定字符串,因此您需要提供-x与整行完全匹配的选项。

grep -Fx 'APPLICATION.REFERENCE.LOCAL' filename

来自man grep

   -F, --fixed-strings
          Interpret PATTERN as a  list  of  fixed  strings,  separated  by
          newlines,  any  of  which is to be matched.  (-F is specified by
          POSIX.)

   -x, --line-regexp
          Select  only  those  matches  that exactly match the whole line.
          (-x is specified by POSIX.)

例子:

$ cat file
APPLICATION.REFERENCE.LOCAL
1APPLICATION.REFERENCE.LOCAL
APPLICATION.REFERENCE.LOCAL1
APPLICATION.REFERENCE0LOCAL
$ grep -Fx 'APPLICATION.REFERENCE.LOCAL' file
APPLICATION.REFERENCE.LOCAL
于 2013-11-01T05:34:02.583 回答
6

您需要使用反斜杠转义点:

grep 'APPLICATION\.REFERENCE\.LOCAL'

如果您想要在该行中“仅且完全”,则需要使用“字符串的开头和结尾”字符进行锚定:

grep '^APPLICATION\.REFERENCE\.LOCAL$'
于 2013-11-01T05:34:33.337 回答
0

如果您希望在单词边界处限制匹配,请添加-w. 所以grep -Fw string file

如果“单词边界”的定义对您来说过于宽松,您需要在正则表达式中指定边界。像这样的东西,也许:

grep -E (^|[^A-Z])APPLICATION\.REFERENCE\.LOCAL([^A-Z]|$)' file

只会找到以行首/行尾为界的匹配项,或者不是大写字母的字符。

于 2013-11-01T05:51:08.960 回答