2010-07-12 01:30
http://hi.baidu.com/hyzshua1230/blog/item/4a18e63899c187cbd56225b5.html http://bbs.chinaunix.net/thread-702042-1-1.html 如果是按行操作,就统统都用 sed;如果是不仅按行,还要按列操作,就统统都用 awk 比如文件 ab334cd-ccffafsdfbb006 bb00dg-xxxxxx80790 变成 cdab334-ccffafsdfb006b dgbb00-xxxxx80790x 逻辑关系: -前的字符串由3 部分组成: 1字母2数字3字母,把它们重组为 312 三个部分 -后的字串中把结尾的数字串与它前面的一个字母对调 你用posix awk写个出来看看 上面这个例子说明:有的问题用 sed 很容易解决,但是用 awk 就比较费劲。 shell 下工具众多,功能也互相重复,最头疼的是,这些重复部分的语法还各不相同,比如 grep awk sed 都有正则表达式匹配的功能,但是三者的正则表达式语法就不相同,最最最头疼的是,每个工具还分 GNU 版和不是 GNU 版,之间的差别也很大,最最最最最头疼的是,即使都是 GNU 版,那么版本号的细微差别也会带来很多差别。 但是,用 Perl 做这些事,统统都能办到,而且统统都不太复杂。其实这也就是我学习 Perl 的原因。 awk对正则表达式支持的程度比sed要差些,例如sub/gsub中不能用\1, \2这样的向前引用。gsed中的gensub是可以的,但必须写成\\1, \\2。 perl应该说结合了sed/awk的优点,尤其是强大的正则表达式是我的最爱。^_^不过据说有的unix平台下缺省没有安装。 Perl 还有一点优势,那就是 Windows 下有完美的支持,而 sed 和 awk 因为 windows 讨厌的“双引号问题”,因此工作起来都不是很爽,不过写成脚本执行还是可以的。 sed/awk/grep 的好处在于,它们大多数都是单一文件的软件,因此在小系统上要比 Perl 好使,Perl 动辄数十M…… 总结: Perl安装文件比较大,默认系统中不一定有;sed、awk是单一文件,系统自带。 脚本处理中Perl功能最强,且可调试。它原始的目的就是用来取代UNIX原有的sed/awk 与shell script的组合。 |