Perl命令行常見用法及技巧

Perl命令行常見用法及技巧
做者: 懶人運維 來源:  懶人運維 

 
 

 

替換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; }

相關文章
相關標籤/搜索