您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Perl命令行使用的技巧
Perl命令行使用技巧Perl在设计之初就是为了能够整合shell、awk、sed、sort、grep等工具的目的而出现的,我们习惯在unix/linux下使用系统为我们提供的一系列优秀的工具进行文本处理、文件管理,那是便捷并且是可行的。但是在windows下我们在日常办公过程中,如果需要进行比较复杂的文本处理,是否必须把文本粘贴到linux下,用我们习惯的方式进行处理,或者是使用ultraedit、word之类的工具想其他办法处理呢?如果你熟悉perl的话,那么只需要安装perl的win32版本,unix下常规的awk、sed、grep、sort等工具的功能是完全可以实现的。并且只要掌握以下的一些方法,所有的文本处理都可以放在一个perl解释器进程中完成,不需要另外调用awk或sed等,减少了shell与awk数据传递的麻烦。下面我就简单的举几个例子进行说明:1.一个命令行模拟awk:#将第一列和倒数第二列相加#等同awk脚本:awk'{i=NF-1;print$1+$i}'perl-lane'print$F[0]+$F[-2]'举例1:如果有文件raytest.txt12345678使用命令行:perl-lane'print$F[0]+$F[-2]'raytest.txt执行后结果为:412简要说明:-l参数是在打印每一行运算结果后加上行结束符(默认为换行符),如果没有此参数,上例的输出就会是:412-a与-n参数一起使用时开启类似awk的自动分割输入行的功能,默认使用空格或tab分割,可以使用-F参数指定分割符。分割的内容放入特定的数组@F。-n参数开启按行读取的功能,类似awk的方式一行行从文件中读取-e参数将后边的串内容作为perl代码处理2.打印文件中的一系列行:a)打印行号范围内的内容:#打印文件中15到17行的内容perl-ne'printif$.=15;exitif$.=17;'#或者更为简单perl-ne'printif15..17'简要说明:$.为perl中的默认变量,存储当前的行号,与awk中的NR意义相同。15..17表示范围,“..”操作符指示范围默认读入的行放置在$_中,print的默认处理对象也是$_b)打印文件中配对标识之中的内容:#打印文件中行内容为“BEGIN”和“END”之间的行内容perl–ne‘printif/^BEGIN$/../^END$/简要说明://是指示使用正则表达式,这里标识一行中只有BEGIN或END的行。正则表达式默认匹配$_。3.sed的功能,文件编辑:a)在线替换文件中特定内容#将所有.c文件中的“ray”替换为“pac”,并且将源文件备份为.bakperl-p-i.bak-e's/\bray\b/pac/g'*.c简要说明:-i参数表示原地修改文件(同sed中的-i),如果提供可选参数,则使用它为后缀建立源文件备份。-p参数基本同-n参数,只是在处理完成后插入一条print,将处理结果打印出来,同sed的行为正则表达式中\b匹配单词边界,b)删除文件中的特定行:#删除文件中的前10行:perl–ne–i.old'printunless1..10'ray.txtc)处理文件中的数字:#将.c和.h文件中所有的数字全部加一:perl-i.tiny-pe's/(\d+)/1+$1/ge'*.[ch]简要说明:正则表达式中\d+代表匹配数字(长度不限),$1是指前边的第一个表达式所匹配上的内容d)在正则表达式中进行运算:#将文本中所有的“ray”用小于611的随机数替代perl–i.bak–pe“s/ray/intrand(611)/ge”*.txt简要说明:正则表达式中的intrand(611)是指取小于611的随机数,并取整正则表达式的命令字/e表示此表达式中有需要perl来处理的语句,并且将处理结果作为表达式内容e)在文件中插入4位数字的行号:perl–i.bak-pe'$_=sprintf%04d%s,$.,$_'ray.txt4.文件管理功能:a)批量文件重命名:#将所有.txt文件的首字母修改为大写ls*.txt|perl–ne‘chomp;printf“mv$_%s”,ucfirst$_”或者直接:ls*.txt|perl–ne‘chomp;rename$_,ucfirst$_”简要说明:第一个表达式只是打印对应的shell命令,需要使用者获得输出然后执行第二个表达式直接调用perl的rename函数,对文件重命名后记:仔细研究perl,可以为我们的运维工作带来很多方便,单行的perl指令往往比调用awk、sed更为方便快捷。下面是perl的一些命令行参数列表,供大家参考:整洁性-w打开警告-Mstrict打开严格编译指示(pragma)数据-0(这是个零)指定输入记录分隔符-a将数据分割成名为@F的数组-F指定分割时-a使用的模式(请参阅perldoc-fsplit)-i在适当的位置编辑文件(请参阅perldocperlrun以获取大量详细信息)-n使用将所有@ARGV参数当作文件来逐个运行-p和-n一样,但是还会打印$_的内容执行控制-e指定字符串以作为脚本(多个字符串迭加)执行-M导入模块-I指定目录以搜索标准位置前的模块
本文标题:Perl命令行使用的技巧
链接地址:https://www.777doc.com/doc-5282363 .html