【perl脚本】perl one line的几个有趣实例1

简介: 【perl脚本】perl one line的几个有趣实例1

前言

作为一个萌新,最近痴迷于各种一行式脚本,比如sed/grep/awk等,这次来探究下perl一行脚本的几个有趣实例;

关于perl one line的语法规则,直接看这位大神的博客就好:

https://www.cnblogs.com/f-ck-need-u/p/10219326.html

实例中用到的两个test文件内容如下:

实例1:文本替换

perl -pi -e 's/begin/BEGIN/g' test1

作用:类似于sed操作,将文件test1中的begin替换为BEGIN,直接修改原文件;

-pi:等价于-p -i;

-p/-n:使用<>将所有@ARGV参数当作文件来执行,例如例子中的test文件;-n、-p都可以被-e中的while(<>)替代;-p一般会将每一行输出,-n表示禁止默认的输出;

不过在我的Ubuntu系统中,单独使用-p时会输出每一行信息,-pi或者-p -i时未输出;

-i:in-place简称,原地修改文件,-i.tmp则会将原文件另存为原名称.tmp之后再修改原文件;

-e:将其后的字符串作为脚本内容执行,如实例中的's/begin/BEGIN/g';

其他常用符号如-a -F -w请参考前言博客。

实例2:另存原文件之后修改文件

perl -pi.bak -e 's/BEGIN/begin/g' test1

作用:将原文件test1另存为test1.bak,之后修改test1文件将BEGIN替换为begin;

实例3:还是上面的例子,可以结合find一起使用

find ./ -name "test2" | xargs perl -pi.tmp -e "s/begin/BEGIN/g"

实例4:还是进行替换,替换you后面的内容;

perl -p -e 's/(you\s+).*/$1you_rep/g' test2

$1:perl语言中第一组正则匹配()中匹配的内容,在某些系统中可能需要使用\1;

实例5:按行倒叙整个文件;

perl -p -e 'print reverse <>' test1

因为脚本中包含了print,就不要使用-p了;令我不解的是,这种情况下使用-p会导致程序无法退出,一直处于等待状态,求大佬解答;

实例6:按段落(没有空行即一个段落)倒叙整个文件;

perl -00e 'print reverse <>' test1

-00:以段落模式打开文件;

实例7:按字符倒叙整个文件;

perl -0777e 'print scalar reverse <>' test1

-0777一次性读入整个文件;

注意实例5 6 7应避免使用-i,否则你将得到一个空的test1文件;如果想原文件写入,不如使用下 > 吧;

实例8:显示文件3~5行;

perl -ne 'print if 3 .. 5' test1

-n禁止默认的输出,如果想要强制输出,只能在-e表达式中自行指定输出操作,例如print/say/printf。

实例9:显示BEGIN - end之间的内容;

print -ne 'print if /begin/ .. /end/' test1

嗯?最后一个end消失了?根据我之前的测试,https://blog.csdn.net/moon9999/article/details/106484521,最后一个end应该不会消失才对,难道是因为我换了linux系统的原因?

实例10:删除BEGIN END之间的内容;

实例11:在文章开头加一段话;

欢迎添加我的微信~

实例12:在文章结尾加一段话;

注意eof和eof()的区别:前者找的是单一文档的结尾,后者找的是整体执行的结尾;

实例13:在每行开始加行号;

但是同时加两个文件会出问题:

这时候要这么写:

实例14:perl one line同样支持BEGIN块和END块;

 

相关文章
|
IDE 编译器 程序员
深入理解C程序的#include和头文件,让c工程只有.h文件(狗头)
深入理解C程序的#include和头文件,让c工程只有.h文件(狗头)
1502 0
|
存储 安全 Linux
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
Android安全启动学习(四):device-mapper-verity (dm-verity)和哈希树
746 0
|
存储 JSON 监控
APM监控 · 入门篇 · Android端测监控平台建设(1)
APM 全称 Application Performance Management & Monitoring (应用性能管理/监控) 性能问题是导致 App 用户流失的罪魁祸首之一,如果用户在使用我们 App 的时候遇到诸如页面卡顿、响应速度慢、发热严重、流量电量消耗大等问题的时候,很可能就会卸载掉我们的 App。这也是我们在目前工作中面临的巨大挑战之一,尤其是低端机型。
3979 0
APM监控 · 入门篇 · Android端测监控平台建设(1)
|
存储 Java
JDK下载和安装及介绍
JDK下载和安装及介绍
1466 0
|
监控 Cloud Native 数据挖掘
飞天发布时刻|阿里云可观测全速演进
5 月 22 日 10:00,阿里云飞天发布时刻,阿里云应用实时监控服务 ARMS 宣布全面升级。这次发布不仅标志着阿里云技术实力的演进,更是对企业需求深刻洞察后的创新实践。
1265 122
|
负载均衡 安全 网络安全
什么是 Traceroute?为什么要使用它?
【8月更文挑战第31天】
1170 0
大陆、港澳台身份证、护照、军官证的正则表达式
大陆、港澳台身份证、护照、军官证的正则表达式
1923 0
|
存储 Python
候选基因如何分析?
候选基因如何分析?
|
Linux Shell 数据格式
Linux脚本丨批量提取VCF文件指定样本数据
Linux脚本丨批量提取VCF文件指定样本数据
|
存储 SQL Java
分布式任务调度框架(一):Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。其功能类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能,作为一个优秀的开源调度框架
1175 0
分布式任务调度框架(一):Quartz