曾經,我熟練操作grep、awk、sed,甚至自認對sed尚算精通,我一度愛上了寫腳本。但是隨着寫腳本的次數多了,需求復雜了,我深深的感受到shell的無奈。
例如,我多次遇到過類似下面這種惡心的需求:
sed ... | awk ...
其中sed要操作第2到第5行,同時awk要操作中間的第3行,在awk操作第3行的時候,sed的第2行不能丟棄。
對於shell管道來說這是不可能實現的(注:合理使用while read line能實現),因為它通過管道在各命令之間傳遞數據,這使得管道前面的數據必須傳遞給管道后面,而數據一被管道傳遞就從管道左邊程序的緩存中消失了,也就是不可重用了。
於是我學了Perl,在這之前我也學了python,但是學過Perl之后,在我覺得shell難以實現的時候,我的第一想法幾乎總是使用Perl去實現腳本,而不是用python。
本文我要分享的是一行式Perl程序,它完全可以替代grep+sed+awk,且功能還更強大。文章篇幅稍大,可算是一本較薄的書,但除了專門的perl正則表達式之外(如果沒有學過編程語言的正則的話。我也寫過一篇非常詳細又0基礎友好的Perl正則,如有需求,可參見Perl正則表達式超詳細教程),其它的都絕對基礎,我解釋的也足夠簡單,只要認真看,它真的比awk更簡單。按照我現在的感受,我花上幾天時間去深入掌握awk,真不如去學Perl一行式。
Perl一行式系列文章:Perl一行式程序
如果覺得文章不錯,請幫忙點下右下角的贊。感謝!!!