注:-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









