Regex 如何在ksh中精确匹配字符串中的点

Regex 如何在ksh中精确匹配字符串中的点,regex,grep,Regex,Grep,我无法得到精确匹配的字符串作为输出,而试图grep的字符串中有点 例如:grep“APPLICATION.REFERENCE.LOCAL” 我甚至试过: grep-F'APPLICATION.REFERENCE.LOCAL',它还显示类似匹配的行,如APPLICATION.REFERENCE.LOCAL1 请帮帮我。因为您使用的是将模式解释为固定字符串的-F,所以您需要提供-x选项以精确匹配整行 grep -Fx 'APPLICATION.REFERENCE.LOCAL' filename 从

我无法得到精确匹配的字符串作为输出,而试图grep的字符串中有点

例如:
grep“APPLICATION.REFERENCE.LOCAL”

我甚至试过:

grep-F'APPLICATION.REFERENCE.LOCAL'
,它还显示类似匹配的行,如
APPLICATION.REFERENCE.LOCAL1


请帮帮我。

因为您使用的是将模式解释为固定字符串的
-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

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

grep 'APPLICATION\.REFERENCE\.LOCAL'
如果您想在行中显示“仅此”,则需要使用“字符串的开始和结束”字符定位:

grep '^APPLICATION\.REFERENCE\.LOCAL$'

如果希望约束到单词边界处的匹配,请添加
-w
。所以
grep-Fw字符串文件

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

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

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

我喜欢使用
-Fx
。@Floris因为OP使用了
-F
^
&
$
锚定将被解释为文字
-x
与整行匹配。这就是为什么在我的回答中,我取出了
-F
,放入锚并转义了
。你走了另一条路。我的回答更一般地说是“当字符串中有一个点我想匹配时,我如何使用正则表达式”;你的答案更清楚地回答了给出的具体例子。我认为,这两种观点都为讨论增添了一些内容。这就是为什么我对你的答案投了赞成票。@Floris是的,我完全同意。你的学习内容是关于锚定和转义元字符。不管怎样,你使用哪个shell并不影响
grep
的工作方式。(在病理情况下,如何正确引用正则表达式在shell之间可能有所不同,但这里的引用很简单。)如果您有GNU
grep
,则使用
grep-E
并非绝对必要,但它更简单,并且可以跨POSIX移植。