Perl命令行应用程序详解

2019-10-01 10:56:45刘景俊

注:-e在单行命令中非常的重要,做单行命令时一定要加入在使用perl的单行命令时要注意使用”,不要使用"",其实sed和awk也是一样,当然这只是一个建议,看下面的例子就能明白:


perl -e 'print "$$n"'
5719

'$$'在perl中表示当前的pid,如果使用的是单引号,其中还可以放双引号,还有变量,重要的是,这些变量不用担心被shell转义。


perl -pi -e 's/aaa/bbb/' filename

修改当前file文件中的文件,不生成中间文件,速度很快.记住 -i 开关,因为它让你原地编辑文件。


perl -ne 'print if /^int/' filename

象grep一样过滤文件中需要的内容。这个地方,使用了-n,所以一次是做一行的操作,直到整个文件读完。另外,在管道时,-n也会一样,来遍历管道送过来的内容。


perl -n -e 'print "$. - $_"' filename

这个例子中的,没用-ne,只是命令写成了-n -e,其实一样,这个例子中,是给当前文件中的内容都加一个行号打印出来.注:$.表示当前行号。


perl -pe '$_ = "$. $_"' filename

这个其实和上面一样,分别只是使用了-p替换了-n,这个有个什么好处啦,别的地方都一样,但-p按行来遍历完文件后,会给$_打印出来。相当于awk分割域(awk‘{i = NF – 1; print $1 + $i}')。


perl -lane 'print $F[0] + $F[-2]'

这个神奇的地方在于-a,使用-a后.因为-n分行读进来,然后-a给数据分割成@F的数组。


perl -ne 'print if /^START$/ .. /^END$/'

打印正则中从$start到$end的地方


perl -ne 'print if $. >= 15; exit if $. >= 17;'

有效地打印数字范围中的行


perl -p -i.bak -e 's/bfoob/bar/g' *.c

原地修改 -i 开关的神奇之处在于它对 @ARGV 中的每个文件都用该脚本对该文件输出所产生的文件版本进行替代。


perl -ne 'print scalar reverse $_' test

给文件中的内容反向排序,比如文件中有fukai,就会变成iakuf.

替换
将所有C程序中的foo替换成bar,旧文件备份成.bak


perl -p -i.bak -e 's/bfoob/bar/g' *.c

很强大的功能,特别是在大程序中做重构。记得只有在UltraEdit用过,如果你不想备份,就直接写成 perl -p -i -e 或者更简单 perl -pie

将每个文件中出现的数值都加一


perl -i.bak -pe 's/(d+)/ 1 + $1 /ge' file1 file2 ....

将换行符rn替换成n

perl -p -i -e 's/rn/n/g' file

同dos2unix命令。

将换行符n替换成rn