如何在ksh中将字符串与点中的点完全匹配

时间:2013-11-01 05:32:14

标签: regex grep

在尝试grep查找包含点的字符串时,我无法将完全匹配的字符串作为输出。

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

我甚至尝试过:

grep -F 'APPLICATION.REFERENCE.LOCAL' <FILENAME>也会显示类似匹配的行,例如APPLICATION.REFERENCE.LOCAL1

请帮助我。

3 个答案:

答案 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

只能查找以行的开头/结尾为界的匹配项,或者不是大写字母的字符。