Regex 如何在ksh中精确匹配字符串中的点
我无法得到精确匹配的字符串作为输出,而试图grep的字符串中有点 例如: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“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之间可能有所不同,但这里的引用很简单。)如果您有GNUgrep
,则使用grep-E
并非绝对必要,但它更简单,并且可以跨POSIX移植。