Perl一行式:文本编解码、替换
Perl一行式:文本编解码、替换
perl一行式程序系列文章:Perl一行式
文本大小写转换
全部字符转换成大写或小写,有几种方式:
1 | # 转大写 |
每行首字母大小写转换:
1 | $ perl -nle 'print lcfirst' file.log |
单词首字母大写,其它小写:
1 | $ perl -ple 's/(\w+)/\u$1/g' file.log |
修剪前缀、后缀空白
去掉前缀空白的方式:
1 | $ perl -ple 's/^\s+//' file.log |
去掉后缀空白的方式:
1 | $ perl -lpe 's/\s+$//' file.log |
同时去掉前缀和后缀空白:
1 | $ perl -lpe 's/^\s+|\s+$//' file.log |
反序输出所有段落
1 | $ perl -00 -e 'print reverse <>' file.log |
前面的文章压缩连续的空行解释过,-00
是按段落读取且压缩连续的空行。
reverse <>
中reverse的操作对象期待的是一个列表,所以<>
会一次性读取整个文件且按照段落读取,每个段落是列表中的一个元素。最后reverse函数反序这个列表,然后被print输出。
反序输出所有行
1 | $ perl -e 'print reverse <ARGV>' file.log |
这里reverse <ARGV>
表示一次性读取file.log的所有行并进行反转。
也可以使用下面这种方式,但如果文件结尾不正确(缺少eof),可能会卡住:
1 | $ perl -e 'print reverse <>' file.log |
ROT13字符映射
Perl中可使用tr///
或y///
进行字符一一映射的替换。它们和unix下的tr命令作用类似。
1 | $ perl -le '$string="hello";$string =~ y/a-zA-Z/N-Za-mA-Mn-z/;print $string' |
BASE64编码、解码
MIME::Base64
模块提供了base64编码、解码的方法。
编码:
1 | $ perl -MMIME::Base64 -e 'print encode_base64("coding")' |
解码:
1 | $ perl -MMIME::Base64 -le 'print decode_base64("Y29kaW5n")' |
编码文件:
1 | $ perl -MMIME::Base64 -0777 -ne ' |
解码文件:
1 | $ perl -MMIME::Base64 -0777 -ne 'print decode_base64($_)' file |
URL转义
使用URI::Escape
模块即可进行URL转义。该模块需要额外安装cpan URI::Escape
。
1 | $ perl -MURI::Escape -le 'print uri_escape("http://example.com")' |
反转义:
1 | $ perl -MURI::Escape -le ' |
HTML编码、解码
先安装额外HTML格式的编解码模块cpan HTML::Entities
。
1 | $ perl -MHTML::Entities -le 'print encode_entities("<html>")' |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 骏马金龙!
评论