Perl之單行命令特技

替換
將所有C程序中的foo替換成bar,舊文件備份成.bak
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c很強大的功能,特別是在大程序中做重構。記得只有在UltraEdit用過。 如果你不想備份,就直接寫成 perl -p -i -e 或者更簡單 perl -pie, 恩,pie這個單詞不錯
將每個文件中出現的數值都加一
perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 ....將換行符\r\n替換成\n
perl -pie 's/\r\n/\n/g' file同dos2unix命令。
將換行符\n替換成\r\n
perl -pie 's/\n/\r\n/g' file同unix2dos命令。
取出文件的一部分
顯示字段0-4和字段6,字段的分隔符是空格
perl -lane 'print "@F[0..4] $F[6]"' file很好很強大,同 awk 'print $1, $2, $3, $4, $5, $7'。參數名稱lane也很好記。
如果字段分隔符不是空格而是冒號,則用
perl -F: -lane 'print "@F[0..4]\n"' /etc/passwd顯示START和END之間的部分
perl -ne 'print if /^START$/ .. /^END$/' file恐怕這個操作只有sed才做得到了吧……
相反,不顯示START和END之間的部分
perl -ne 'print unless /^START$/ .. /^END$/' file顯示開頭50行:
perl -pe 'exit if $. > 50' file同命令 head -n 50
不顯示開頭10行:
perl -ne 'print unless 1 .. 10' file顯示15行到17行:
perl -ne 'print if 15 .. 17' file每行取前80個字符:
perl -lne 'print substr($_, 0, 80) = ""' file每行丟棄前10個字符:
perl -lne 'print substr($_, 10) = ""' file搜索
查找comment字符串:
perl -ne 'print if /comment/' duptext這個就是普通的grep命令了。
查找不含comment字符串的行:
perl -ne 'print unless /comment/' duptext反向的grep,即grep -v。
查找包含comment或apple的行:
perl -ne 'print if /comment/ || /apple/' duptext相同的功能就要用到egrep了,語法比較複雜,我不會……
計算
計算字段4和倒數第二字段之和:
perl -lane 'print $F[4] + $F[-2]'要是用awk,就得寫成 awk '{i=NF-1;print $5+$i}'
排序和反轉
文件按行排序:
perl -e 'print sort <>' file相當於簡單的sort命令。
文件按段落排序:
perl -00 -e 'print sort <>' file多個文件按文件內容排序,並返回合併後的文件:
perl -0777 -e 'print sort <>' file1 file2文件按行反轉:
perl -e 'print reverse <>' file1相應的命令有嗎?有……不過挺偏,tac(cat的反轉)
數值計算
10進制轉16進制:
perl  -ne  'printf "%x\n",$_'10進制轉8進制: perl -ne 'printf "%o\n",$_'
16進制轉10進制:
perl -ne 'print  hex($_)."\n"'8進制轉10進制:
perl -ne 'print  oct($_)."\n"'簡易計算器。
perl -ne 'print  eval($_)."\n"'其他
啓動交互式perl:
perl -de 1查看包含路徑的內容:
perl -le 'print for @INC'備註
與One-Liner相關的Perl命令行參數:
-0<數字>
(用8進製表示)指定記錄分隔符($/變量),默認爲換行
-00
段落模式,即以連續換行爲分隔符
-0777
禁用分隔符,即將整個文件作爲一個記錄
-a
自動分隔模式,用空格分隔$_並保存到@F中。相當於@F = split ''。分隔符可以使用-F參數指定
-F
指定-a的分隔符,可以使用正則表達式
-e
執行指定的腳本。
-i<擴展名>
原地替換文件,並將舊文件用指定的擴展名備份。不指定擴展名則不備份。
-l
對輸入內容自動chomp,對輸出內容自動添加換行
-n
自動循環,相當於 while(<>) { 腳本; }
-p
自動循環+自動輸出,相當於 while(<>) { 腳本; print; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章