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

Perl 命令行处理command line common usage and skill

发布时间:2020-12-16 00:17:56 所属栏目:大数据 来源:网络整理
导读:http://blog.chinaunix.net/uid-26074921-id-2942312.html 替换 将所有C程序中的foo替换成bar,旧文件备份成.bak perl -p -i.bak -e ’s/bfoob/bar/g’ *.c 很强大的功能,特别是在大程序中做重构。记得只有在UltraEdit用过。 如果你不想备份,就直接写成

http://blog.chinaunix.net/uid-26074921-id-2942312.html

替换

将所有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个字符:

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”‘

简易计算器。

perl -ne ‘print eval($_).”n”‘

其他

启动交互式perl:

perl -de 1

查看包含路径的内容:

perl -le ‘print for @INC’

备注 perl --help

与One-Liner相关的Perl命令行参数:

-0<数字>

(用 8进制表示)指定记录分隔符($/变量),默认为换行

-00

段落模式,即以连续换行为分隔符

-0777

禁用分隔符,即将整个文件作为一个记录

-a

自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定

-F

指定-a的分隔符,可以使用正则表达式

-e

执行指定的脚本。

-i<扩展名>

原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。

-l

对输入内容自动chomp,对输出内容自动添加换行

-n

自动循环,相当于 while(<>) { 脚本; }

-n通常都会加,用于从标准输入和文件读取(即使一行也要加)

-n是不打印的,?打印什么需要你自己指定,? 是打印截取的地方
等于perl -e '<>;/..../ and print ...'
a=OFC30L40.0
echo $a | perl '/(d+)(?=D)/ and print $1'
?
such as: 提取匹配的30

-p

自动循环+自动输出,相当于 while(<>) { 脚本; print; }

-p 匹配到就打印。打印all

a=OFC30L40.0
echo $a | perl '/(d+)(?=D)/ and print $1'
such as: 提取匹配的all。OFC30L40.0

==============================================================

http://blog.sina.com.cn/s/blog_494bf2bf0100lidf.html

perl用作命令行操作简介

?????? Perl 用作命令行操作的快速而又难看的脚本是很有用的;通过命令行,Perl 仅用一行就可以实现大多数其它语言需要数页代码才能完成的任务,这个小东东的功能可是非常强大的。

?????? 参数:

?????? -w?? ? 打开警告。

?????? -i?????在原文件中编辑(就地编辑)。

?????? -i.bak? 就地编辑,但是会备份原文件,并且以.bak为后缀,这个.bak可以修改成自己想要的任何符号。

?????? -n??? ? 使用<>将所有@ARGV参数当作文件来逐行运行,会将读入的内容隐式的逐一按行来遍历文件,每一行将缺省保存在 ?$_;意即会把输入的文件逐行的读取并保存在$_这个变量中,我们修改$_相当于间接影响文件中的内容,这个工作其实是perl封装好了的,直接使用就好了;这个参数不会自动打印$_。

?????? -p??? ? 这个和-n类似,但是会打印$_。

?????? -e??? ? 指定字符串用作脚本执行;通常后跟单引号,把需要执行的语句封装在其中。

?????? 注释:关于-p和-n开关的使用,当你想显示打印数据时,使用-n开关;-p开关会隐式????????? ????? 的打印$_;因此,-n开关更加适用对文件进行选择性的处理,只需打印特殊的数据,-p更加适用于对文件进行完全处理;命令行perl同样可以对批量文件进行操作。

?

替换A为B

?????? perl ?-i? -pe? ‘s/old_str/new_str/g’? files

?

替换A为B并备份

?????? perl ?-i.bak? -pe? ‘s/old_str/new_str/g’? files

?

修改并输出到屏幕

?????? perl? -ne? ‘s/old_str/new_str/g;print;’? files

?????? 此处修改后输出到屏幕,但并不会改变原文件。

?

搜索满足条件的行

?????? perl? -i? -ne? ‘print? if ?/condition/’? files

在文件中插入行号

?????? perl? -i? -pe? ‘$_ = sprintf “%04d %s”,$.,$_’? files

?

在匹配的某行行首添加字串

?????? perl? -i? -pe? ‘print? “string”? if? /condition/’? files

?

在匹配的某行行尾添加字串

?????? perl? -i? -pe? ‘chomp; $_ = $_ . “stringn”? if? /condition/’? files

?

在匹配的某行前增加一行

?????? perl? -i? -pe? ‘print? “stringn”? if? /condition/’? files

?

在匹配的某行后增加一行

? ? ? ? ? ? perl? -i? -pe? ‘$_ = $_ . “stringn”? if? /condition/’? files

(编辑:李大同)

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

    推荐文章
      热点阅读