使用grep命令匹配恰好包含2个星号的行

3

我需要帮助找出一个命令,可以搜索文件并显示包含恰好2个*的行。

  • 有效匹配示例:***red*manche*ste*r
  • 无效匹配示例:****mache*s*te*r

目前我有:

grep ‘\*.*\*’ filename.txt

但这个展示的是至少有两个 * 的行,但并不一定是刚好两个。我找不到只匹配刚好两个 * 的方法。


也许可以使用 grep '^[^*]*\*[^*]*\*[^*]*$' filename.txt - Wiktor Stribiżew
可以运行,但你能解释一下为什么吗?谢谢! ^ - 匹配行首 [^*] - 不以 * 开头 ** - 匹配前一个字符0次或多次 - omonoia
你可以使用 awk -F'*' 'NF==3' filename.txt 来处理这种情况。 - Sundeep
1个回答

3

您可以使用

grep '^[^*]*\*[^*]*\*[^*]*$' filename.txt

该正则表达式匹配一个字符串,该字符串恰好包含两个星号,并且在它们之前、之后和之间有任何其他字符。
模式细节:
- ^ - 字符串的开始 - [^*]* - 0个或多个不是 * 的字符 - \* - 一个 * - [^*]*\*[^*]* - 0个或多个不是 * 的字符,一个 *,再次是0个或多个不是 * 的字符 - $ - 字符串的结束。

这很麻烦,但非常美观。 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接