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
Perl中可以使用tr///
或y///
進行字符一一映射的替換。它們和unix下的tr命令做用相似。
$ perl -le '$string="hello";$string =~ y/a-zA-Z/N-Za-mA-Mn-z/;print $string' URYYb
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
使用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格式的編解碼模塊cpan HTML::Entities
。
$ perl -MHTML::Entities -le 'print encode_entities("<html>")' $ perl -MHTML::Entities -le 'print decode_entities("<html>")'