king@king:~$ perl -F':' -alne ‘print $F[0],” “,$F[-1] if /bash$/' /etc/passwd
root /bin/bash
king /bin/bash
guest-b0SIey /bin/bash
看到上面的那个-l的参数没?它的最主要的作用就是chomp字段和在每个输出的后面加上“n”,让输出换行;是不是挺有用的呢?
有没有其它和awk有类似的地方呢?答案是肯定的,
BEGIN{},END{} 是不是也很熟悉呢?
以下是一些常用的简单实例
#perl -pi -e's/aaa/bbb/' filename 修改当前file文件中的文件,不生成中间文件,速度很快.记住 -i 开关,因为它让你原地编辑文件.
#perl -ne ‘print if /^aaaaa/' 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
#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 给文件中的内容反向排序,比如文件中有abc,就会变成cba









