admin 管理员组文章数量: 887016
2024年2月25日发(作者:div css模板是什么意思)
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:如果有文件
1 2 3 4
5 6 7 8
使用命令行:perl -lane 'print $F[0] + $F[-2]'
执行后结果为:
4
12
简要说明:
-l 参数是在打印每一行运算结果后加上行结束符(默认为换行符),如果没有此参数,上例的输出就会是:
412
-a 与-n参数一起使用时开启类似awk的自动分割输入行的功能,默认使用空格或tab分割,可以使用-F参数指定分割符。分割的内容放入特定的数组@F。
-n 参数开启按行读取的功能,类似awk的方式一行行从文件中读取
-e 参数将后边的串内容作为perl代码处理
2. 打印文件中的一系列行:
a) 打印行号范围内的内容:
# 打印文件中15到17行的内容
perl -ne 'print if $. >= 15; exit if $. >= 17;'
# 或者更为简单
perl -ne 'print if 15 .. 17'
简要说明:
$. 为perl中的默认变量,存储当前的行号,与awk中的NR意义相同。
15..17表示范围,“..”操作符指示范围
默认读入的行放置在$_中,print的默认处理对象也是$_
b) 打印文件中配对标识之中的内容:
# 打印文件中行内容为“BEGIN”和“END”之间的行内容
perl –ne ‘print if /^BEGIN$/../^END$/
简要说明:
//是指示使用正则表达式,这里标识一行中只有BEGIN或END的行。正则表达式默认匹配$_。
3. sed的功能,文件编辑:
a) 在线替换文件中特定内容
# 将所有.c文件中的“ray”替换为“pac”,并且将源文件备份为.bak
perl -p - -e 's/brayb/pac/g' *.c
简要说明:
-i 参数表示原地修改文件(同sed中的-i),如果提供可选参数,则使用它为后缀建立源文件备份。
-p 参数基本同-n 参数,只是在处理完成后插入一条print,将处理结果打印出来,同sed的行为
正则表达式中b匹配单词边界,
b) 删除文件中的特定行:
# 删除文件中的前10行:
perl –ne –
'print unless 1 .. 10'
c) 处理文件中的数字:
# 将.c和.h文件中所有的数字全部加一:
perl - -pe 's/(d+)/ 1 + $1 /ge' *.[ch]
简要说明:
正则表达式中d+代表匹配数字(长度不限),$1是指前边的第一个表达式所匹配上的内容
d) 在正则表达式中进行运算:
# 将文本中所有的“ray”用小于611的随机数替代
perl – –pe “s/ray/int rand(611)/ge” *.txt
简要说明:
正则表达式中的int rand(611)是指取小于611的随机数,并取整
正则表达式的命令字/e表示此表达式中有需要perl来处理的语句,并且将处理结果作为表达式内容
e) 在文件中插入4位数字的行号:
perl – -pe'$_ = sprintf "%04d %s", $., $_'
4. 文件管理功能:
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 -f split)
-i 在适当的位置编辑文件(请参阅 perldoc perlrun 以获取大量详细信息)
-n 使用 <> 将所有 @ARGV 参数当作文件来逐个运行
-p 和 -n 一样,但是还会打印 $_ 的内容
执行控制
-e 指定字符串以作为脚本(多个字符串迭加)执行
-M 导入模块
-I 指定目录以搜索标准位置前的模块
版权声明:本文标题:Perl命令行使用技巧 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1708834536h532377.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论