regex - Grep 和 % 百分比符号

标签 regex bash grep

在命令行上使用 grep 时,当我使用 % 百分号时,我会得到不同的结果。

我希望这个表达式匹配它不会返回任何内容:

bash-4.1$ echo ' (in=Gen)' | grep -in '*(*)'

但是,如果我包含前导百分比字符,则它是匹配的:

bash-4.1$ echo ' (in=Gen)' | grep -in '%*(*)'
1: (in=Gen)

百分号 % 符号是 grep 中的特殊字符或控制字符吗?查看可用的文档,我没有看到任何对其的引用。

最佳答案

如果您输入任何其他(有效)字符,也会有匹配项,例如使用 ,:

% echo ' (in=Gen)' | grep -in ',*(*)'
1: (in=Gen)

问题在于您的模式,*(*),此处:

  • * 表示匹配零个或多个前面的标记,因为没有前面的标记,它可以字面匹配 * 。由于不存在 *,因此该模式不匹配任何内容

%*(*) 中:

  • %* 表示匹配 % 零次或多次,因为没有 % 存在,grep%* 不匹配;在这种情况下 grep 仅匹配最后一个 )

关于regex - Grep 和 % 百分比符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41981586/

相关文章:

javascript - 在 Javascript 中使用正则表达式获取美分

ruby - 截断不匹配的部分字符串

Bash:按分隔符分割但保留分隔符

linux - 使用 sed 删除带有重复字符和增量字符的字符串?

git - 如何grep git diff?

php - is_numeric、intval、ctype_digit .. 你可以依赖它们吗?

javascript - 使用 RegExp 从 JavaScript 数组返回精确匹配

bash - grep - 列出不包含两种模式的所有行

unix - Grep文件包含两次或更多次出现的特定字符串

linux - 如何对 find 的输出执行 "for each"?