正则表达式匹配特殊字符的确切出现

时间:2019-06-16 20:07:04

标签: regex linux grep

文件:

cat test.txt

100 ***

10 ** // target

Grep:

grep -E '\*{2}' test.txt

100 ***

10 ** 

不是{m}用来精确匹配数字吗?

如何使*发生2次?

2 个答案:

答案 0 :(得分:2)

您可以使用

grep -E '(^|[^*])\*{2}($|[^*])' test.txt

请参见online grep demo

test="100 ***
10 ** // target"
grep -E '(^|[^*])\*{2}($|[^*])' <<< "$test"
# => 10 ** // target

详细信息

  • (^|[^*])-字符串或除*以外的任何字符的开头
  • \*{2}-两个星号
  • ($|[^*])-字符串结尾或除*以外的任何字符。

带有空白边界的变化

如果您只需要在空格之间匹配一个“单词”,请使用

grep -E '(^|[[:space:]])\*{2}($|[[:space:]])' test.txt

答案 1 :(得分:0)

一个简单的 basic 正则表达式也可以显式地指定"**",而不用'*'包围。例如:

$ grep '^[^*]*[*][*][^*]*$' test.txt
10 **

这将与包含[*][*]的行匹配,而该行中的任何地方都不会被另一个'*'包围。