查看包含特定注释的CVS 某个版本:
cvs log *.cpp | perl -e 'undef $/;$a=<>;print "$&\n" if ($a =~ /^revision(?:.(?!^revision))*?XXXX.*?---+$/sm'
其中"特定注释"为XXXX, -------是一个CVS log命令输出的分隔行. 分隔各个不同revision的信息.
本来用支持PCRE功能的 grep :
cvs log *.cpp | grep -P '(?sm)revision(?:.(?!revision))*?XXXX.*?----+$'
这在linux上grep 2.5.1 版本也能工作, 但在cygwin 的grep, 同样是2.5.1 版本上却不能匹配任何内容.
通过md5sum 验证在 windows + cygwin上和linux上输入文件绝对一致的情况下测试过.
所以grep -P 功能是不那么可靠的.
另外发现 linux 上 2.5.1 版本的grep 也并非固若金汤,
下面的简单正则表达式可以通过:
echo asdf | grep -P '(.)*'
输出是asdf
但是:
echo asdf | grep -P '(?s)(.)*'
得到的却是
Segmentation fault
相比较而言, 使用perl的唯一原因就在于它的正则表达式支持一直处于世界最先进水平.
阅读(599) | 评论(0) | 转发(0) |