轉(zhuǎn)自:http://deepfuture.iteye.com/blog/645247
替換
將所有C程序中的foo替換成bar暂幼,舊文件備份成.bak
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c
很強(qiáng)大的功能证逻,特別是在大程序中做重構(gòu)揣苏。記得只有在UltraEdit用過(guò)气堕。 如果你不想備份峻呕,就直接寫(xiě)成 perl -p -i -e 或者更簡(jiǎn)單 perl -pie堆缘, 恩,pie這個(gè)單詞不錯(cuò)
將每個(gè)文件中出現(xiàn)的數(shù)值都加一
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
很好很強(qiáng)大叠聋,同 awk 'print $1, $2, $3, $4, $5, $7'撕阎。參數(shù)名稱(chēng)lane也很好記。
如果字段分隔符不是空格而是冒號(hào)碌补,則用
perl -F: -lane 'print "@F[0..4]\n"' /etc/passwd
顯示START和END之間的部分
perl -ne 'print if /^START$/ .. /^END$/' file
恐怕這個(gè)操作只有sed才做得到了吧……
相反虏束,不顯示START和END之間的部分
perl -ne 'print unless /^START$/ .. /^END$/' file
顯示開(kāi)頭50行:
perl -pe 'exit if $. > 50' file
同命令 head -n 50
不顯示開(kāi)頭10行:
perl -ne 'print unless 1 .. 10' file
顯示15行到17行:
perl -ne 'print if 15 .. 17' file
每行取前80個(gè)字符:
perl -lne 'print substr($_, 0, 80) = ""' file
每行丟棄前10個(gè)字符:
perl -lne 'print substr($_, 10) = ""' file
搜索
查找comment字符串:
perl -ne 'print if /comment/' duptext
這個(gè)就是普通的grep命令了。
查找不含comment字符串的行:
perl -ne 'print unless /comment/' duptext
反向的grep厦章,即grep -v魄眉。
查找包含comment或apple的行:
perl -ne 'print if /comment/ || /apple/' duptext
相同的功能就要用到egrep了,語(yǔ)法比較復(fù)雜闷袒,我不會(huì)……
計(jì)算
計(jì)算字段4和倒數(shù)第二字段之和:
perl -lane 'print $F[4] + $F[-2]'
要是用awk,就得寫(xiě)成 awk '{i=NF-1;print $5+$i}'
排序和反轉(zhuǎn)
文件按行排序:
perl -e 'print sort <>' file
相當(dāng)于簡(jiǎn)單的sort命令岩梳。
文件按段落排序:
perl -00 -e 'print sort <>' file
多個(gè)文件按文件內(nèi)容排序囊骤,并返回合并后的文件:
perl -0777 -e 'print sort <>' file1 file2
文件按行反轉(zhuǎn):
perl -e 'print reverse <>' file1
相應(yīng)的命令有嗎?有……不過(guò)挺偏冀值,tac(cat的反轉(zhuǎn))
數(shù)值計(jì)算
10進(jìn)制轉(zhuǎn)16進(jìn)制:
perl? -ne? 'printf "%x\n",$_'
10進(jìn)制轉(zhuǎn)8進(jìn)制: perl -ne 'printf "%o\n",$_'
16進(jìn)制轉(zhuǎn)10進(jìn)制:
perl -ne 'print? hex($_)."\n"'
8進(jìn)制轉(zhuǎn)10進(jìn)制:
perl -ne 'print? oct($_)."\n"'
簡(jiǎn)易計(jì)算器也物。
perl -ne 'print? eval($_)."\n"'
其他
啟動(dòng)交互式perl:
perl -de 1
查看包含路徑的內(nèi)容:
perl -le 'print for @INC'
備注
與One-Liner相關(guān)的Perl命令行參數(shù):
-0<數(shù)字>
(用8進(jìn)制表示)指定記錄分隔符($/變量),默認(rèn)為換行
-00
段落模式列疗,即以連續(xù)換行為分隔符
-0777
禁用分隔符滑蚯,即將整個(gè)文件作為一個(gè)記錄
-a
自動(dòng)分隔模式,用空格分隔$_并保存到@F中。相當(dāng)于@F = split ''告材。分隔符可以使用-F參數(shù)指定
-F
指定-a的分隔符坤次,可以使用正則表達(dá)式
-e
執(zhí)行指定的腳本。
-i<擴(kuò)展名>
原地替換文件斥赋,并將舊文件用指定的擴(kuò)展名備份缰猴。不指定擴(kuò)展名則不備份。
-l
對(duì)輸入內(nèi)容自動(dòng)chomp疤剑,對(duì)輸出內(nèi)容自動(dòng)添加換行
-n
自動(dòng)循環(huán)滑绒,相當(dāng)于 while(<>) { 腳本; }
-p
自動(dòng)循環(huán)+自動(dòng)輸出,相當(dāng)于 while(<>) { 腳本; print; }