一語中的
關於 perl 命令列上的各種 options, 例如 -a 是什麼意思, 請參考 perlrun(1)
例: 印出系統中每位使用者自己提供的公開資訊: perl -F: -nae
'printf "%-8s | $F[4]\n", $F[0]' /etc/passwd
這裡的 -a 及
-F: 是指: 對讀進來的每一列, 以 : 為欄位分隔符號, 進行自動拆解,
彷彿自動加了一句: @F = split /:/;
例: 想比對的字串, 在一列上出現多次, 可以全部抓出來,
而不要只抓每列的第一個符合字串嗎? 例如想將一個網頁 abc.html
內所有網址全部抓出來: perl -ne 'print join("\n",@x),"\n" if
(@x=m#href="(.*?)"#g)' abc.html
因為比對 (m#...#) 的時候,
後面加上 g, 且傳回值存入陣列, 所以會把一列上所有合乎條件的字串,
逐個放入陣列當中。 印出來的時候, 用換列字元把陣列中的字串接起來,
每個網址單獨印在一列, 看起來比較整齊, 也比較方便後續處理。
例: 一次設定許多帳號的密碼perl -ne 'chomp; print "$_:",
join("",reverse split //), "\n"' names | chpasswd
不過這個例子不好... 這種密碼不安全。
例: Debian 套件管理: 誰佔了多少空間?perl -000 -ne 'printf
"%6d $1\n",$2 if
/^Package:\s*(.*?)\n.*?^Status:[^\n]*\sinstalled\n.*?^Installed-Size:\s*(\d+)/ms'
/var/lib/dpkg/status | sort -n > by-size.txt
status 的內容長得像 這樣
其實有指令可以直接查: dpkg-query -Wf
'${Installed-Size;6} ${Package}\n'
詳見 man dpkg-query
例: 「課表 ==> 課表」 HTML entity 轉換
有時候某些軟體產生的 html 檔案, 裡面的中文用 html entity 表示,
例如 「課表」 這兩個字變成 「課表」。
如何將它轉換成普通文字編輯器 (例如 vim 或 nano) 可以編輯的檔案呢?
請把上面兩個 html entity 剪貼到一個文字檔, 叫做 sched.html 好了。
perl -pe 's/\&#(\d+);/chr($1)/eg' sched.html | u8tob5
> sched-big5.html
轉完之後記得進去把編碼 (charset 欄位)
從 utf-8 改成 big5。
其他類似文章:
- Unix Review > Perl Is a Gem: One-Liners and Programs
- The top 10 tricks of Perl one-liners
- Useful One-Line Scripts for Perl
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/pl/oneliner.php; 您所看到的版本: June 03 2017 07:37:32.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。