Perl一行式:文本编解码、替换
perl一行式程序系列文章:Perl一行式
文本大小写转换
全部字符转换成大写或小写,有几种方式:
# 转大写
$ perl -nle 'print uc' file.log
$ perl -ple '$_ = uc' file.log
$ perl -nle 'print "\U$_"' file.log
# 转小写
$ perl -nle 'print lc' file.log
$ perl -ple '$_ = lc' file.log
$ perl -nle 'print "\L$_"' file.log
每行首字母大小写转换:
$ perl -nle 'print lcfirst' file.log
$ perl -lpe '$_ = ucfirst' file.log
$ perl -lne 'print \u\L$_' file.log
单词首字母大写,其它小写:
$ perl -ple 's/(\w+)/\u$1/g' file.log
修剪前缀、后缀空白
去掉前缀空白的方式:
$ perl -ple 's/^\s+//' file.log
去掉后缀空白的方式:
$ perl -lpe 's/\s+$//' file.log
同时去掉前缀和后缀空白:
$ perl -lpe 's/^\s+|\s+$//' file.log
反序输出所有段落
$ perl -00 -e 'print reverse <>' file.log
前面的文章压缩连续的空行解释过,-00
是按段落读取且压缩连续的空行。
reverse <>
中reverse的操作对象期待的是一个列表,所以<>
会一次性读取整个文件且按照段落读取,每个段落是列表中的一个元素。最后reverse函数反序这个列表,然后被print输出。
反序输出所有行
$ perl -e 'print reverse <ARGV>' file.log
sync x 4 65534 sync /bin /bin/sync
sys x 3 3 sys /dev /usr/sbin/nologin
bin x 2 2 bin /bin /usr/sbin/nologin
daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
root x 0 0 root /root /bin/bash
这里reverse <ARGV>
表示一次性读取file.log的所有行并进行反转。
也可以使用下面这种方式,但如果文件结尾不正确(缺少eof),可能会卡住:
$ perl -e 'print reverse <>' file.log
ROT13字符映射
Perl中可使用tr///
或y///
进行字符一一映射的替换。它们和unix下的tr命令作用类似。
$ perl -le '$string="hello";$string =~ y/a-zA-Z/N-Za-mA-Mn-z/;print $string'
URYYb
BASE64编码、解码
MIME::Base64
模块提供了base64编码、解码的方法。
编码:
$ perl -MMIME::Base64 -e 'print encode_base64("coding")'
Y29kaW5n
解码:
$ perl -MMIME::Base64 -le 'print decode_base64("Y29kaW5n")'
coding
编码文件:
$ perl -MMIME::Base64 -0777 -ne '
print encode_base64($_)' file.log
解码文件:
$ perl -MMIME::Base64 -0777 -ne 'print decode_base64($_)' file
URL转义
使用URI::Escape
模块即可进行URL转义。该模块需要额外安装cpan URI::Escape
。
$ perl -MURI::Escape -le 'print uri_escape("http://example.com")'
http%3A%2F%2Fexample.com
反转义:
$ perl -MURI::Escape -le '
print uri_unescape("http%3A%2F%2Fexample.com")'
http://example.com
HTML编码、解码
先安装额外HTML格式的编解码模块cpan HTML::Entities
。
$ perl -MHTML::Entities -le 'print encode_entities("<html>")'
$ perl -MHTML::Entities -le 'print decode_entities("<html>")'
Perl一行式:文本编解码、替换的更多相关文章
- Perl一行式:处理空白符号
perl一行式程序系列文章:Perl一行式 假如文件file.log内容如下: root x 0 0 root /root /bin/bash daemon x 1 1 daemon /usr/sbi ...
- Perl一行式:处理行号和单词数
perl一行式程序系列文章:Perl一行式 所有行的行号 $ perl -pe '$_ = "$. $_"' file.log $ perl -ne 'print "$. ...
- Perl一行式:选择行输出、删除、追加、插入
perl一行式程序系列文章:Perl一行式 对于Perl的一行式perl程序来说,选择要输出的.要删除的.要插入/追加的行是非常容易的事情,因为print/say决定行是否输出/插入/追加/删除.虽然 ...
- Perl一行式:字段处理和计算
perl一行式程序系列文章:Perl一行式 获取每行最后一个字段 $ perl -alne 'print $F[$#F]' file.log 这里涉及到了选项"-a".数组@F.这 ...
- Fiddler使用技巧:强大的数据文本编解码功能
- 总览 打开Fiddler后,使用快捷键Ctrl+e或者点击菜单Tools-->TextWizard...即可进入TextWizard界面. 界面上方为输入框,用来输入需要编码或解码的数据. ...
- Netty常用招式——ChannelHandler与编解码
本文是Netty系列第8篇 上一篇文章我们深入学习了Netty逻辑架构中的核心组件ChannelHandler和ChannelPipeline,并介绍了它在日常开发使用中的最佳实践.文中也提到了,Ch ...
- 【转】Netty系列之Netty编解码框架分析
http://www.infoq.com/cn/articles/netty-codec-framework-analyse/ 1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称 ...
- Netty系列之Netty编解码框架分析
1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途. 反之,解码(Decod ...
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...
随机推荐
- JS正则表达式检验数字或者带小数点的数字
1. var patrn = /^\d+(\.\d+)?$/; var num = 0.11; if (!patrn.exec(num)){ alert("请您输入数字");ret ...
- C++ STL编程轻松入门【转载】
1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL "什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数 ...
- scala 下 sigmoid 与breeze.numeric.sigmoid差异对比
scala> val beforeInit = System.nanoTime;val handsgn = rd.map(x => 1.0 / (1.0 + Math.exp(-x))); ...
- Web发展史
Web 万维网常称为WWW(World Wide Web)发展至今仅30年,英国计算机科学家,蒂姆 伯纳斯 李爵士 提出了 World Wide Web的设计方案,1990年李爵士完成了Web 所有的 ...
- [转]Setting Keystone v3 domains
http://www.florentflament.com/blog/setting-keystone-v3-domains.html The Openstack Identity v3 API, p ...
- Signed Distance Field Shadow in Unity
0x00 前言 最近读到了一个今年GDC上很棒的分享,是Sebastian Aaltonen带来的利用Ray-tracing实现一些有趣的效果的分享. 其中有一段他介绍到了对Signed Distan ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)
背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮币”.为了增加趣味性,帮帮币“掉落”之后所有用户都可以“捡取”,谁先捡到 ...
- .NET Core跨平台的奥秘[下篇]:全新的布局
从本质上讲,按照CLI规范设计的.NET从其出生的那一刻就具有跨平台的基因,这与Java别无二致.由于采用了统一的中间语言,微软只需要针对不同的平台设计不同的虚拟机(运行时)就能弥合不同操作系统与处理 ...
- [Swift]LeetCode652. 寻找重复的子树 | Find Duplicate Subtrees
Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only ne ...
- [Swift]LeetCode1003. 检查替换后的词是否有效 | Check If Word Is Valid After Substitutions
We are given that the string "abc" is valid. From any valid string V, we may split V into ...