加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl命令行开关

发布时间:2020-12-16 00:27:19 所属栏目:大数据 来源:网络整理
导读:纯属个人学习助记笔记,难免有疏漏之处,建议阅读原著《PERL实例精解》 =================================================================================== [开关项] [描述] -0 规定记录分隔符 -a 与 -n 或者 -p 一起使用, 负责打开自动拆分模式, 用
纯属个人学习助记笔记,难免有疏漏之处,建议阅读原著《PERL实例精解》
===================================================================================
[开关项]

[描述]

-0
规定记录分隔符
-a
与 -n 或者 -p 一起使用, 负责打开自动拆分模式, 用于对空白字符进行隐式拆分, 并将字段放入数组 @F 中, 例如:
date | Perl -ane 'print "$F[0]n";
-c
只检查 Perl 脚本语法, 而不执行脚本
-d
对脚本打开 Perl 调试器
-D
设置 Perl 的调试标记(请先检查 Perl 的安装情况, 确保已经安装了调试器)。 若要观察 Perl 是如何执行脚本的, 可使用 -D14
-e command
用于再命令行而不是在脚本中执行 Perl 命令
-F pattern
规定拆分输入行时使用的模式。 模式是位于斜杠、单引号或双引号之间的正则表达式。 例如, -F/:+/ 表示在一个或多个冒号上拆分输入行。 如果 -a 仍然起作用的话, 则打开它
-h
打印 Perl 的命令选项列表
-i extension
在使用 <> 循环遍历文件时启用原位编辑模式。 如果没有规定扩展名的话, 则原位修改各行内容。 否则使用扩展名来修改输入文件名(以便充当备份文件), 并使用原位编辑的原文件名创建输出文件。 这也是所有 print 语句选择的文件句柄
-I directory
与 -P选项一起使用, 负责告诉 C 预处理程序查找包含的文件, 其默认目录包括 /usr/included、/usr/lib/Perl 以及当前目录
-1 digits
启用自动行结束处理。 如果使用了 -n 或者 -p 选项, 则去掉终止符。 把位数(八进制) 赋值给 $ ,并将行终止符添加到 print 语句中。 如果没有规定位数的话, 则将 $ 设置为 $/ 的当前值
-m [-] module
-M [-] module
-M [-] module'
-[mM] module =
arg [,arg]..
-m module
在执行 Perl 脚本之前执行 use 方法
-M module
再执行 Perl 脚本之前执行 use 方法。 如果添加附加的文本, 则可使用引号。 方括号中的短横线表示把 use 指令替换为 no
-n
使 Perl 隐式地循环遍历指定的文件, 并只打印规定的行
-p
使 Perl 隐式地循环遍历指定的文件, 同时打印所有的行
-P
使要运行的脚本在 Perl 编译之前通过 C 预处理程序
-s
再脚本名之后、文件名参数之前启用开关项解析, 并从@ARGV 数组中删除所有找到的开关项。 将开关项设置为同名的标量型变量, 并将标量赋值为 1 。 例如, -abc 在脚本中将转换为 $abc
-S
如果不支持 #!/usr/bin/perl 行, 则让 Perl 在 PATH 环境变量中搜索脚本
-T
强制打开 “污染“ 检查, 用于测试脚本, 一般只用在 setuid 或 setgid 程序上。 推荐自行检查 CGI 脚本
-u
编译后产生脚本的核心转储(基于 UNIX 系统)
-U
允许 Perl 执行不安全的操作, 如果是超级用户的话, 则断开目录链接
-v
打印 Perl 的版本信息
-V
打印最重要的 Perl 配置项和数组 @INC 中当前值的汇总
-V:NAME
打印 NAME 的值, 其中 NAME 是配置变量
-w
打印警告信息, 包括错误使用保留字、文件句柄、子例程等情况
-W
启用所有警告, 而不论是否已经用 no warnings 关闭了本地警告
-x directory 忽略 #!/usr/bin/perl 行之前的任何文本。 如果将目录名当作 -x 开关的参数, 则 Perl 会在开始执行脚本之前自动切换到该目录
-X
关闭所有警告


替换
将所有C程序中的foo替换成bar,旧文件备份成.bak
perl -p -i.bak -e ’s/bfoob/bar/g’ *.c

很强大的功能,特别是在大程序中做重构。记得只有在UltraEdit用过。 如果你不想备份,就直接写成 perl -p -i -e 或者更简单 perl -pie, 恩,pie这个单词不错
将每个文件中出现的数值都加一
perl -i.bak -pe ’s/(d+)/ 1 + $1 /ge’ file1 file2 ….
将换行符rn替换成n
perl -pie ’s/rn/n/g’ file
同dos2unix命令。
将换行符n替换成rn
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
恐怕这个操作只有sed才做得到了吧……
相反,不显示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($_,80) = “”‘ file
每行丢弃前10个字符:
搜索
查找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”,69); font-family:Georgia; letter-spacing:2px; line-height:20px">16进制转10进制:
perl -ne ‘print hex($_).”n”‘
8进制转10进制:
perl -ne ‘print oct($_).”n”‘
简易计算器。
perl -ne ‘print eval($_).”n”‘
其他
启动交互式perl:
perl -de 1
查看包含路径的内容:
perl -le ‘print for @INC’
备注
与One-Liner相关的Perl命令行参数:
-0<数字>
(用 8进制表示)指定记录分隔符($/变量),默认为换行
-00
段落模式,即以连续换行为分隔符
-0777
禁用分隔符,即将整个文件作为一个记录
-a
自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定
-F
指定-a的分隔符,可以使用正则表达式
-e
执行指定的脚本。
-i<扩展名>
原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
-l
对输入内容自动chomp,对输出内容自动添加换行
-n
自动循环,相当于 while(<>) { 脚本; }
-p
自动循环+自动输出,相当于 while(<>) { 脚本; print; }


原帖地址:?http://hi.baidu.com/kaavield/blog/item/6b390eae5bd9f4f7faed5044.html

http://hi.baidu.com/txbnmoubb/blog/item/b5faa4803aacfb81f703a6cb.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读