繁体   English   中英

Grep和%百分比符号

[英]Grep and the % percentage symbol

在命令行上使用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只匹配最后一个)

grep使用的BRE(基本正则表达式)中(与ERE相反, egrepgrep -E扩展了RE),如果*不是前一个表达式的量词,它将与文字星号匹配。 ^不在表达式的开头,而$不在行尾的位置:它们被解释为普通字符^$

来自man 7 regex

'^'是普通字符,除了RE的开头或带括号的子表达式的开头(!),'$'是普通字符,除了RE的末尾或括号的子表达式的结尾是(!), “ *”是普通字符,如果它出现在RE的开头或带括号的子表达式的开头(可能在前导“ ^”之后)。

关于第二个示例,仅匹配的是右括号(在顶部标记为^ ):

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

注意使用--colorgrep突出显示实际匹配的内容,这对于理解grep的行为非常有价值。

您正在寻找的seach可能是这样的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM