在尝试 grep 查找其中包含点的字符串时,我无法获得精确匹配的字符串作为输出。
例如:grep "APPLICATION.REFERENCE.LOCAL" <FILENAME>
我什至尝试过:
grep -F 'APPLICATION.REFERENCE.LOCAL' <FILENAME>
它还显示具有类似匹配项的行,例如APPLICATION.REFERENCE.LOCAL1
.
请帮我。
由于您使用-F
which 会将模式解释为固定字符串,因此您需要提供-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
您需要使用反斜杠转义点:
grep 'APPLICATION\.REFERENCE\.LOCAL'
如果您想要在该行中“仅且完全”,则需要使用“字符串的开头和结尾”字符进行锚定:
grep '^APPLICATION\.REFERENCE\.LOCAL$'
如果您希望在单词边界处限制匹配,请添加-w
. 所以grep -Fw string file
如果“单词边界”的定义对您来说过于宽松,您需要在正则表达式中指定边界。像这样的东西,也许:
grep -E (^|[^A-Z])APPLICATION\.REFERENCE\.LOCAL([^A-Z]|$)' file
只会找到以行首/行尾为界的匹配项,或者不是大写字母的字符。