可爱的牙膏 · 傅艺伟30岁儿子意外离世,母子生前合照公开, ...· 1 月前 · |
坏坏的西瓜 · 明道云伙伴成果与展望-CSDN博客· 1 年前 · |
暗恋学妹的饼干 · 【如虎 XL换挡杆底座价格_报价】_帮手汽配网· 1 年前 · |
仗义的沙滩裤 · ST海马正式摘帽,海马汽车能否实现自救?· 1 年前 · |
直爽的小蝌蚪 · 我养了两个黑化魔法师 - 腾讯动漫· 1 年前 · |
据说 perl 的初衷是 shell 与 sed、awk 的三合一杂交产物。也就是说,shell 还是要
会的,但 sed 与 awk 没必要深入学习了,只要学会 perl (的基础部分)就可以了。
于是,perl 支持非常强大的单行命令。结合超强的可视编辑器 vim 的命令行模式,可以
更方便灵活地处理复杂编辑需求。
## perl 命令行参数
* -e 将 perl 代码放在单引号中,作为 perl -e 选项的参数
* -M 额外加载模块,类似 use 语句
* -n 隐式循环,while() 处理标准输入或文件的每一行
* -p 同 -n 但在循环末尾自动打印 `$_` 当前行变量,-n 要在 -e 代码中显式用 print
* -l 自动在每个 print 输出后加换行 "\n"
* -a 在隐式循环中自动分隔每行,类似 awk 工作模式,-F 指定分隔符
* BEGIN END 在 -e 代码中要加入这两个块,类似 awk 在所有循环前后执行
* -i 原位编辑文件,类似 sed 的原位编辑参数,慎用覆盖原文件
完整参数解释参考手册 $perldoc perlrun
## 典型参数组合示例模板
* perl -pe 'any perl code;' -e 'any perl code too;' input-files
非常类似 sed,读取输入文件的每一行,存入 `$_` 默认变量,修改后打印该行。如果不
接文件参数,就等待从标准输入。可用 > 重定向到输入文件。若加 -i 选项,则原位编
辑输入文件,最好提供备份后缀名,如 -i.bak 备份原文件。
如果不想打印整行,只想提取一部分,请用 -n 选项然后显式调用 print。例如:
perl -lne 'print $1 if /REGEXP/;'
是否要 -l 选项自动添加 "\n" 看需求
* perl -aF: -ne 'code using @F' input-files
非常类似 awk,自动分隔每一行,可用 F 指定分隔符,或用按默认的空白 '\s+' 分隔。
分隔结果保存在 @F 数组中,$F[0] 是第一列,`$_` 是整行。同样支持 BEGIN END 块。
## 在 vim 的命令中使用单行 perl 命令
在 vim 命令行中用 :!perl 调用外部 perl 单行命令,vim 编译版本无需 +perl 支持,
只要 shell 中能执行 perl 解释器即可。
使用 :%!perl -lne 'print perl code' 过滤当前编辑 buff 的所有行。没有给 perl 命
令提供文件参数,表示从标准输入,而 vim 会将当前编辑文本按标准输入发给 perl 命
令,其输出替换当前编辑文本。
使用 :' !perl -lne 'print perl code' 过滤当前选定的部分文本行。' 是在
可视模式下按 : 自动加上的特殊行地址,也可以手动输入数字表示起止行,% 表示所有
行,. 表示当前行,$ 表示最后一行。
在 vim 中尝试使用 perl 单行命令,有个好处是如果 perl 代码写错了(如正则表达式
失误),可按 u 一键撤销修改。
对于复杂的 perl 代码或 perl 新手,不方便使用单行命令时,建议写成独立 perl 脚本
,在脚本中显式使用 while() {} 循环。然后在 vim 中使用过滤命令 :%!perl
script.pl。独立脚本可以写备忘注释,可以接收额外参数适应不同需求。
领取专属 10元无门槛券
私享最新 技术干货
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
坏坏的西瓜 · 明道云伙伴成果与展望-CSDN博客 1 年前 |
暗恋学妹的饼干 · 【如虎 XL换挡杆底座价格_报价】_帮手汽配网 1 年前 |
仗义的沙滩裤 · ST海马正式摘帽,海马汽车能否实现自救? 1 年前 |
直爽的小蝌蚪 · 我养了两个黑化魔法师 - 腾讯动漫 1 年前 |