替換php
將全部C程序中的foo替換成bar,舊文件備份成.bakhtml
perl -p -i.bak -e ’s/\bfoo\b/bar/g’ *.c正則表達式
很強大的功能,特別是在大程序中作重構。記得只有在UltraEdit用過。 若是你不想備份,就直接寫成 perl -p -i -e 或者更簡單 perl -pie, 恩,pie這個單詞不錯app
將每一個文件中出現的數值都加一less
perl -i.bak -pe ’s/(\d+)/ 1 + $1 /ge’ file1 file2 ….運維
將換行符\r\n替換成\n命令行
perl -pie ’s/\r\n/\n/g’ fileunix
同dos2unix命令。htm
將換行符\n替換成\r\nblog
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; }