在尝试grep查找包含点的字符串时,我无法将完全匹配的字符串作为输出。
例如:grep "APPLICATION.REFERENCE.LOCAL" <FILENAME>
我甚至尝试过:
grep -F 'APPLICATION.REFERENCE.LOCAL' <FILENAME>
也会显示类似匹配的行,例如APPLICATION.REFERENCE.LOCAL1
。
请帮助我。
答案 0 :(得分:7)
由于您使用的-F
会将模式解释为固定字符串,因此您需要提供-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
答案 1 :(得分:4)
你需要用反斜杠来逃避点:
grep 'APPLICATION\.REFERENCE\.LOCAL'
如果你想在行中“只有这个”,你需要锚定“字符串的开头和结尾”字符:
grep '^APPLICATION\.REFERENCE\.LOCAL$'
答案 2 :(得分:0)
如果您希望限制字边界处的匹配,请添加-w
。所以grep -Fw string file
如果“单词边界”的定义过于宽松,则需要在正则表达式中指定边界。这样的事情,也许是:
grep -E (^|[^A-Z])APPLICATION\.REFERENCE\.LOCAL([^A-Z]|$)' file
只能查找以行的开头/结尾为界的匹配项,或者不是大写字母的字符。