Perl一行式:文本編解碼、替換

perl一行式程序系列文章Perl一行式html


文本大小寫轉換

所有字符轉換成大寫或小寫,有幾種方式:bash

# 轉大寫
$ 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

修剪前綴、後綴空白

去掉前綴空白的方式:url

$ perl -ple 's/^\s+//' file.log

去掉後綴空白的方式:unix

$ perl -lpe 's/\s+$//' file.log

同時去掉前綴和後綴空白:code

$ perl -lpe 's/^\s+|\s+$//' file.log

反序輸出全部段落

$ perl -00 -e 'print reverse <>' file.log

前面的文章壓縮連續的空行解釋過,-00是按段落讀取且壓縮連續的空行。htm

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的全部行並進行反轉。blog

也能夠使用下面這種方式,但若是文件結尾不正確(缺乏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("&lt;html&gt;")'
相關文章
相關標籤/搜索