comments:perl -pe command line只能在shell中用。在perl中需要用system(perl -pe ...)使用.
需要处理文本时,通常我会使用sed或者awk,但我从来没有掌握它们,每次用时都得临时去查怎么使用。最近又碰到一个问题,想把一个html里面所有的css及javascript链接取出来,用sed或awk折腾了半天没有整出来,最后终于放弃了。我决定转向perl,perl是门非常强大的通用语言,但它最初诞生是用于文本处理,因此它处理文本的能力非常强大,并且于它一系列古怪的缩写,使得写命令非常简洁,非常适合一次性的文本处理。perl的与正则表达式的是我非常熟悉,几乎所有的现代编程语言都使用的是perl的正则表达式语法,不像vim,sed,grep等的正则表达式需要那么多转义,十分古怪。至于学习成本,我觉得perl更容易学,通用编程语言大都十分相似,如果有多虑其它语言的编程经历,再学习另外一门编程语言非常容易,perl也不例外,在我开始写这篇文章时,其实只看perl的基本语法,花了大概2个小时,当然写的时间要长得多。相反对于sed,awk仅仅用于面向行的流处理工具,其语法跟通用编程语言有很大差别,理解它的处理模型,并记住它的特殊语法要困难得多。学习perl另外一个好处就是可以看懂别人写的perl代码,有很多优秀的perl源代码。以下基于“《SED 单行脚本快速参考》的 awk 实现”,原文内容保留,以便对比。
文本间隔:# 在每一行后面增加一空行
- sed G
- awk '{printf("%s\n\n",$0)}'
- perl -ne 'print "$_\n"'
- perl -pe '$_ .= "\n"'
- perl -pe '$\="\n"'
# 这样在输出的文本中每一行后面将有且只有一空行。
sed '/^$/d;G'
sed 'G;G'