我正在尝试编写一个正则表达式来从/etc/samba/smb.conf中提取所有非评论和非空行。评论是:
我尝试了以下操作,但它没有正确处理评论类型3。
grep -P '^\s*[^#;]' /etc/samba/smb.conf
这个适用于所有3种评论:
grep -P '^\s*[^#;\s]' /etc/samba/smb.conf
你能解释一下为什么将\ s添加到字符类成功过滤掉注释类型3?
答案 0 :(得分:1)
[^...]
表示与...
处的任何字符都不匹配。
您需要:^\s*[#;]
。
答案 1 :(得分:1)
此处的问题是partial matches,因为您没有使用结束锚$
。
如果是例3
;
;
完成\s*
部分匹配。在其他正则表达式中,您已禁用\s
,因此无法捕获空格并禁用部分匹配。
这里正确的正则表达式是
(?m)^(?!\s*[#;]).+$