Perl命令行应用程序详解

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

perl -pie 's/n/rn/g' file

同unix2dos命令。

取出文件的一部分
显示字段0-4和字段6,字段的分隔符是空格

perl -lane 'print "@F[0..4] $F[6]"' file

同 awk 'print $1, $2, $3, $4, $5, $7'。参数名称lane也很好记。

如果字段分隔符不是空格而是冒号,则用


perl -F: -lane 'print "@F[0..4]n"' /etc/passwd

显示START和END之间的部分


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

相反,不显示START和END之间的部分


perl -ne 'print unless /^START$/ .. /^END$/' file

显示开头50行:

perl -pe 'exit if $. > 50' file

同命令 head -n 50

不显示开头10行:


perl -ne 'print unless 1 .. 10' file

显示15行到17行:


perl -ne 'print if 15 .. 17' file

每行取前80个字符:


perl -lne 'print substr($_, 0, 80) = ""' file

每行丢弃前10个字符:


perl -lne 'print substr($_, 10) = ""' file

搜索
查找comment字符串:

perl -ne 'print if /comment/' duptext

这个就是普通的grep命令了。

查找不含comment字符串的行:

perl -ne 'print unless /comment/' duptext

反向的grep,即grep -v。

查找包含comment或apple的行:

perl -ne 'print if /comment/ || /apple/' duptext

相同的功能就要用到egrep了,语法比较复杂……

计算
计算字段4和倒数第二字段之和:

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

要是用awk,就得写成 awk '{i=NF-1;print $5+$i}'

排序和反转
文件按行排序:

perl -e 'print sort <>' file

相当于简单的sort命令。

文件按段落排序:


perl -00 -e 'print sort <>' file

多个文件按文件内容排序,并返回合并后的文件:


perl -0777 -e 'print sort <>' file1 file2

文件按行反转:


perl -e 'print reverse <>' file1

相应的命令有吗?有,tac(cat的反转)

数值计算
10进制转16进制:


perl -ne 'printf "%xn",$_'

10进制转8进制:


perl -ne 'printf "%on",$_'

16进制转10进制:


perl -ne 'print hex($_)."n"'

8进制转10进制:


perl -ne 'print oct($_)."n"'