命令行中执行单行perl脚本

erbaijiu 贡献于2012-08-26

作者 Lenovo User  创建于2012-06-21 16:42:00   修改者Lenovo User  修改于2012-06-21 16:43:00字数1325

文档摘要:在工作和生活中难免有一些文件处理之类的工作需要做,不管你是在Windows下面,还是在Linux下面。当然稍微复杂一些的任务就需要利用正则表达式来完成,很不幸的是Linux shell的正则表达式不太好用,另外对正则表达式的支持也不够好,另外需要学习grep,sed,awk等命令也是挺烦的事儿。
关键词:

在工作和生活中难免有一些文件处理之类的工作需要做,不管你是在Windows下面,还是在Linux下面。当然稍微复杂一些的任务就需要利用正则表达式来完成,很不幸的是Linux shell的正则表达式不太好用,另外对正则表达式的支持也不够好,另外需要学习grep,sed,awk等命令也是挺烦的事儿。当然正则表达式正好是Perl的强项,很多问题都可以在命令行中执行单行Perl解决。本文简单介绍一下perl的单行执行的脚本,揭示一下perl的强大功能。 -e选项      该选项表明后面跟随一条perl脚本。例如: perl -e 'print “hello world!\n"' 将会在标准输出终端输出“hello world”。 -n选项      该选项将会循环读入文件,但是不输入。例如: perl –ne ‘print $_’ 该脚本相当于: while(<>) { print $_; } 注意-n选项只是把文件循环读取一遍,具体的处理需要后面的脚本提供。 在例如打印/etc/passwd中包含root的行: perl -ne 'print $_ if(/root/)' /etc/passwd -p选项      该选项循环读取文件,并输出到标准输出。例如: perl -pe 1 相当于: while(<>) { 1; } continue { print $_; } 参数1没有实际意义,支持为了让perl语法正确。可以在print之前对当前行进行特殊处理,例如: perl -pe '$_ = “Simon: ” . $_' 将会将每行都以“Simon: ”开头。 -l选项      该选项将会使输入字符串去掉回车符号,而输出再加上回车符号。一般这个选项都需要加上,这样就可以组成-lpe和-lne两种组合。 -i选项      该选项将会在文件中就地修改,并把源文件备份到参数指定后缀的文件中,默认情况下(不指定参数)为-i.bak,用户可以指定其他的后缀。 perl -i -pe 's/\r//g' file 该脚本的作用是将file从dos格式转换成Unix格式,源文件备份到file.bak中。 -a选项      该选项将会以空格分割输入,并把分割结果存放到@F数组中。 $ echo a b c | perl -lane 'print $F[1]' b $ echo a b c | perl -lane 'print "@F[0..1]"' a b $ echo a b c | perl -lane 'print "@F[-2,-1]"' b c 再例如:显示/etc/passwd文件大小,我们首先通过ls -l显示文件的详细信息,发现第五列就是文件大小。则用如下脚本即可实现: ls -l /etc/passwd | perl -lane 'print $F[4]' -F选项      该选项可以让你指定分割符,以代替a选项的空白分割符,注意该选项需要和a选项一起使用。例如需要查找系统中的所有用户: perl -F: -lane 'print $F[0]' /etc/passwd 该命令相当于如下代码: while(<>) { @F = split \:\; print $F[0] . "\n" }      如果熟练使用如上选项,并且对perl比较熟悉的话,基本就可以抛弃shell的正则表达式的依赖了,处理问题也不需要去查grep、awk、sed等的用法了。 参考资料: http://sial.org/howto/perl/one-liner/

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档