[英]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相反, egrep
或grep -E
扩展了RE),如果*
不是前一个表达式的量词,它将与文字星号匹配。 ^
不在表达式的开头,而$
不在行尾的位置:它们被解释为普通字符^
和$
。
来自man 7 regex
:
'^'是普通字符,除了RE的开头或带括号的子表达式的开头(!),'$'是普通字符,除了RE的末尾或括号的子表达式的结尾是(!), “ *”是普通字符,如果它出现在RE的开头或带括号的子表达式的开头(可能在前导“ ^”之后)。
关于第二个示例,仅匹配的是右括号(在顶部标记为^
):
^
echo ' (in=Gen)' | grep --color -in '%*(*)'
1: (in=Gen)
注意使用--color
来grep
突出显示实际匹配的内容,这对于理解grep的行为非常有价值。
您正在寻找的seach可能是这样的:
% echo '*(in=Gen)' | grep -in --color '*(.*)'
1:*(in=Gen)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.