2012年9月17日

第一次被大小写转换的sed命令坑了

昨天需要紧急测试一组翻译结果的得分,其中一个步骤是需要把一个文件每行的首字母大写。

网上查了一下sed脚本,参考的两个网页是

http://www.51testing.com/?uid-375540-action-viewspace-itemid-232269

http://www.pyshell.com/index.php/archives/699

得到的答案都是一致的  sed 's/[a-z]/\u&/'

简单测试了一下,也的确没有问题。

但是,这个小小的步骤导致最终我测试的结果都比正确答案少了10%左右的得分。

同事使用的首字母转大写的命令是   perl -ne 'print ucfirst($_);' inputfile > outputfile

仔细对比了多组结果,发现上面的sed命令存在Bug,因为sed 's/[a-z]/\u&/'实际上是将一行文本里出现的第一个小写字母转换为大写。

正确的sed命令应该是sed 's/^[a-z]/\u&/'    [a-z]前面加入的^表示匹配行首。

总结教训,以后再遇到网上找到的shell命令需要仔细的查看并测试后再用,否则很耽误工作啊。

没有评论: