1. 程式人生 > >kevin_xiang的專欄,mail: [email protec

kevin_xiang的專欄,mail: [email protec

http://wenku.baidu.com/link?url=HM8N9GSFykcz_sfsPsEysSlNKHibk0zOX3w85S1CF54FewDLyRSCSxw23H4uBX9iFFSdiiBd8tGqjK89JvthgHy0XESTCIQYDRO2neuMZAi

Perl命令列引數

執行控制

-e           指定字串以作為指令碼(多個字串迭加)執行

-M         匯入模組

-I            指定目錄以搜尋標準位置前的模組

整潔性

-w          開啟警告

-Mstrict   開啟嚴格編譯指示(pragma)

資料

-0           (這是個零)指定輸入記錄分隔符

-a           將資料分割成名為 @F 的陣列

-F           指定分割時 -a 使用的模式(請參閱 perldoc -f split)

-i            在適當的位置編輯檔案(請參閱 perldoc perlrun 以獲取大量詳細資訊)

-c           進行perl的語法檢查,但不執行perl命令

-F           把預設的分離號改為你想要的。例如把分離號定為非字元

-l            使用-l有兩個效果,第一自動chomp輸入分隔號,第二把$/值付給$\(這樣print的時候就會自動在末尾加\n)

-n           使用<>將所有@ARGV引數當作檔案來逐行執行,會將讀入的內容隱式的逐一按行來遍歷檔案,每一行將預設儲存在$_

-p           和-n一樣,但是還會列印$_的內容

請注意 -p 開關和-n 開關的使用

當您想顯式列印資料時,使用-n開關。-p開關隱式地將print $_語句插入到-n開關所產生的迴圈中。因此,-p開關更適用於對檔案進行的完全處理,而-n開關更適用於選擇性檔案處理,這樣的處理只需列印特定資料。

以下是一些常用的簡單例項

#perl -pi –e’s/aaa/bbb/’ filename

修改當前file檔案中的檔案,不生成中間檔案,速度很快。記住-i開關,因為它讓你原地編輯檔案。

#perl -ne ‘print if /^aaaaa/’ filename

象grep一樣過濾檔案中需要的內容。這個地方使用了-n,所以一次是做一行的操作,直到整個檔案讀完。另外在管道時,-n也會一樣來遍歷管道送過來的內容。

# perl -n -e 'print "$.– $_"' filename

這個例子中的,沒用-ne,只是命令寫成了-n –e,其實一樣,這個例子中是給當前檔案中的內容都加一個行號打印出來。

注:$.表示當前行號

#perl -pe ‘$_ = “$. $_”‘ filename

這個其實和上面一樣,分別只是使用了-p替換了-n,這個有個什麼好處啦,別的地方都一樣,但-p按行來遍歷完檔案後,會給$_打印出來。

大家還記得awk分割域(awk ‘{i = NF – 1; print $1 + $i}’)啊,是不是很方便,下面我們來看看perl

# perl -lane 'print $F[0] +$F[-2]'

這個神奇的地方在於-a,使用-a後,因為-n分行讀進來,然後-a給資料分割成@F的陣列。

#perl -ne ‘print if /^START$/ .. /^END$/’

列印正則中從$start到$end的地方

#perl -ne ‘print if $. >= 15; exit if $. >=17;’

有效地列印數字範圍中的行

#perl -p -i.bak -e ‘s/\bfoo\b/bar/g’ *.c

原地修改-i開關的神奇之處在於它對@ARGV中的每個檔案都用該指令碼對該檔案輸出所產生的檔案版本進行替代

#perl -ne ‘print scalar reverse $_’ test

給檔案中的內容反向排序,比如檔案中有fukai,就會變成iakuf

第一部分:SafetyNetOptions安全網引數

在使用Perl嘗試一些聰明(或stupid)的想法時,錯誤難免會發生.有經驗的Perl程式設計師常常使用三個引數來提前找到錯誤所在,

1-C

這個引數編譯Perl程式但不會真正執行它.由此檢查所有語法錯誤.每次修改perl程式之後我都會立刻使用它來找到任何語法錯誤.

$perl-cprogram.pl

2-W

它會提示你任何潛在的問題.Perl5.6.0之後的版本已經用usewarnings;替換了-w.你應該使用usewarnings因為它要比-w更靈活.

3-T

它把perl放到了tain模式.在這個模式裡,Perl會質疑任何程式外傳來的資料.例如,從Perl命令列讀取,外部檔案裡讀取或是CGI程式裡傳來的資料.

這些資料在-T模式裡都會被Tainted掉.

第二部分:Perl命令列Perl引數:可以讓短小的Perl程式執行在Perl命令列

1-e

可以讓Perl程式在Perl命令列上執行.

例如,我們可以在Perl命令列上執行"HelloWorld"程式而不用把它寫入檔案再執行.

$perl-e'print"HelloWorld\n"'

多個-e也可以同時使用,執行順序根據它出現的位置.

$perl-e'print"Hello";'-e'print"World\n"'

象所有的Perl程式一樣,只有程式的最後一行不需要以;結尾.

2-M

可以象通常一樣引用模

$perl-MLWP::Simple-e'getstore("http://www.163.com/","163.html")'##下載整個網頁

-M+模組名和use模組名一樣

第三部分:隱式迴圈

3-n

增加了迴圈的功能,使你可以一行一行來處理檔案

$perl-n-e'print;'1.txt#####$perl-ne'print;'1.txt

這與下面的程式一樣.

LINE: while(<>;){ print; } <>;開啟Perl命令列裡的檔案,一行行的讀取.每一行預設儲存在$_

$perl-n-e'print"$.-$_"'file

上面的這一行可以寫成

LINE: while(<>;){print"$.-$_" } 輸出當前行數$.和當前行$_.

4:-p,-n一樣,但是還會列印$_的內容

如果想在迴圈的前後做些處理,可以使用BEGIN或ENDblock.下面的這一行計算檔案裡的字數.

$perl-ne'END{print$t}@w=/(\w+)/g;[email protected]'file.txt

每一行所有匹配的字放入陣列@w,然後把@w的元素數目遞加到$t.ENDblock裡的print最後輸出檔案總字數.

還有兩個引數可以讓這個程式變得更簡單.

5:-a

開啟自動分離(split)模式.空格是預設的分離號.輸入根據分離號被分離然後放入預設陣列@F

使用-a,上面的命令可以寫成這樣:

$perl-ane'END{print$x}[email protected]'file.txt##使用了-a

6-F

把預設的分離號改為你想要的.例如把分離號定為非字元,上面的命令可以改為:

$perl-F'\W'-ane'END{print$x}[email protected]'file.txt

下面通過Unixpassword檔案來介紹一個複雜的例子.Unixpassword是文字檔案,每一行是一個使用者記錄,

由冒號:分離.第7行是使用者的登入shell路徑.我們可以得出每一個不同shell路徑被多少個使用者使用:

$perl-F':'-ane'$s{$F[6]}++;'\>;-e'END{print"$_:$s{$_}"forkeys%s}'/etc/passwd

雖然現在不是一行,但是你可以看出使用引數可以解決什麼問題.

第四部分:RecordSeparators資料分隔符

$/和$\--輸入,輸出分隔號.

$/用來分隔從檔案控制代碼裡讀出的資料,預設$/分隔號是\n,這樣每次從檔案控制代碼裡就會一行行的讀取

$\預設是空字元,用來自動加到要print的資料尾端.這就是為什麼很多時候print都要在末尾加上\n.

$/和$\可與-n-p一起使用.在Perl命令列上相對應為-0(零)和-l(這是L).

-0後面可以跟一個16進位制或8進位制數值,這個值用來付給$/.

-00開啟段落模式,-0777開啟slurp模式(即可以一次把整個檔案讀入),這與把$/設為空字元和undef一樣效果.

單獨使用-l有兩個效果:

第一:自動chomp輸入分隔號

第二:把$/值付給$\(這樣print的時候就會自動在末尾加\n)

1:-l引數,用來給每一個輸出加\n.例如

$perl-le'print"HelloWorld"'

第五部分:原位編輯

使用已有的引數我們可以寫出很有效的Perl命令列程式.常見的UnixI/O重定向:

$perl-pe'somecode'>output.txt

這個程式從input.txt讀取資料,然後做一些處理再輸出到output.txt.你當然也可以把輸出重定向到同一個檔案裡.

上面的程式可以通過-i引數做的更簡單些.

2:-i

把原始檔更名然後從這個更名的原始檔裡讀取.最後把處理後的資料寫入原始檔.

如果-i後跟有其他字串,這個字串與原始檔名合成後來生成一個新的檔名.

此檔案會被用來儲存原始檔案以免被-i引數覆蓋.

這個例子把所有php字元替換為perl:

$perl-i-pe's/\bPHP\b/Perl/g'file.txt

程式讀取檔案的每一行,然後替換字元,處理後的資料重新寫入(即覆蓋)原始檔.

如果不想覆蓋原始檔,可以使用

$perl-i.bak-pe's/\bPHP\b/Perl/g'file.txt

這裡處理過的資料寫入file.txt,file.txt.bak是原始檔的備份.

perl經典的例子

問題:

遇到一問題:

[email protected]

[email protected]

[email protected]

[email protected]

類似這種輸出,我想把他們變換成下面形式:

[email protected]

[email protected]

就是將相同郵箱名稱後面的數字相加。各位大俠能否給些思路如何用perl來實現。

答案:perl-anle'$cnt{$F[0]}+=$F[1];END{print"$_\t$cnt{$_}"forkeys%cnt}'urfile

如果熟悉了上面幾個Perl命令列引數的用法,上面的這個命令應該很好理解:

每次讀取urfile的一行,由於使用了-a,開啟自動分離(split)模式.空格是預設的分離號.輸入根據分離號被分離然後放入預設陣列@F中,

以檔案的第一行為例子$F[0]就是[email protected],$F[1]就是2

$cnt{$F[0]}+=$F[1]就是一個雜湊陣列,以$F[0]為key,$F[1]為value,把相同key的數值都疊加起來.然後把檔案的每一行都這樣處理一次.

END{}就是在迴圈完之後再處理.裡面的意思就是列印這個%cnt雜湊陣列.這個雜湊陣列的key就是郵箱名稱,value就是疊加後的數字.

下面的是上面行命令的文字形式:

#!/usr/bin/perl  usestrict;  usewarnings;   

my%hash;  while(<>){  chomp; 

[email protected]=split;  $hash{$array[0]}+=$array[1];  }  

END{  foreach(keys%hash){  print"$_\t$hash{$_}\n";  }  }

相關推薦

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bbc3d2dad5dcd1d2de8e8efbcaca95d8d4d6">[email&#160;protec

http://wenku.baidu.com/link?url=HM8N9GSFykcz_sfsPsEysSlNKHibk0zOX3w85S1CF54FewDLyRSCSxw23H4uBX9iFFSdiiBd8tGqjK89JvthgHy0XESTCIQYDRO2neuMZ

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="473f2e2629202d2e2272720736366924282a">[email&#160;protec

轉自:http://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html 寫在前面 我花了將近一個多月的時間斷斷續續寫下這篇博文,並精心寫下完整demo,寫部落格的辛苦大家懂的,所以轉載務必保留出處。本文所有涉

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f78f9e9699909d9e92c2c2b78686d994989a">[email&#160;protec

http://www.tuicool.com/articles/bUnMfu django提供檔案下載時,若果檔案較小,解決辦法是先將要傳送的內容全生成在記憶體中,然後再一次性傳入Response物件中: def simple_file_download(reque

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fa82939b949d90939fcfcfba8b8bd4999597">[email&#160;protec

http://blog.csdn.net/jackfrued/article/details/17339393 下面的內容是對網上原有的Java面試題集及答案進行了全面修訂之後給出的負責任的題目和答案,原來的題目中有很多重複題目和無價值的題目,還有不少的參考

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="522a3b333c35383b3767671223237c313d3f">[email&#160;protec

http://blog.sina.com.cn/s/blog_a7b8ab2801019gog.html 實現跑馬燈的方法很多,其中最簡單的是採用一句Html程式碼來實現,我們在需要出現跑馬燈效果的地方插入“<marquee>滾動的文字</marquee&

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="68100109060f02010d5d5d281919460b0705">[email&#160;protec

QT的一些範例中有出現 qmax, qmin 等 math函式的身影,但我在官方檔案中卻找不到與 math函式相關的說明,所以我就把函式的source裡面提供的方法整理條列,並且看看還有哪些 math相關的函式可用。在 qglobal.h 裡,可以找到幾種 math函式,條列於下,但一般常用的 math如:

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e9918088878e83808cdcdca99898c78a8684">[email&#160;protec

http://jingyan.baidu.com/article/b87fe19eb03cf1521835681c.html KVM教程:http://wiki.ubuntu.org.cn/Kvm%E6%95%99%E7%A8%8B 1. KVM     KVM的全稱是

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a3dbcac2cdc4c9cac69696e3d2d28dc0ccce">[email&#160;protec

1. 提升規則: a. 所有byte型,short型和char型將被提升到int型。 b. 整個算數表示式的資料型別自動提升到與表示式中最高等級運算元同樣的型別。 例1: short val = 5;  val = val -2 ; 編譯時將報錯 "Type misma

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="85fdece4ebe2efece0b0b0c5f4f4abe6eae8">[email&#160;protec

https://www.cnblogs.com/wangfupeng1988/p/3977924.html說明:  該教程繞開了javascript的一些基本的語法知識,直接講解javascript中最難理解的兩個部分,也是和其他主流面嚮物件語言區別最大的兩個部分——原型和閉

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="265e4f4748414c4f4313136657570845494b">[email&#160;protec

解決 利用 Reducer 拿到的輸入是有序的這一特性,Mapper 和 Recuder 如果都用 identity function,那麼每個 Reducer 的輸出都是有序的,但 Reducer 之間無法保證有序。 如果用歸併排序的思路, 那麼最後還需要一個只有一個 Reducer 的 Mapre

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c8b0a1a9a6afa2a1adfdfd88b9b9e6aba7a5">[email&#160;protec

1. 假設已有一個QDialog的父視窗, 想彈出的子視窗為自己實現的myDialog : QDialog. myDialog 設計和平常的QDialog一樣, childDialog : public QDialog {      ... ...     setLayou

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b3cbdad2ddd4d9dad68686f3c2c29dd0dcde">[email&#160;protec

Hadoop Common Hadoop體系最底層的一個模組,為Hadoop各子專案提供各種工具,如:配置檔案和日誌操作等。 Avro Avro是doug cutting主持的RPC專案,有點類似Google的protobuf和Facebook的thrift。avro用來做

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="79011018171e13101c4c4c390808571a1614">[email&#160;protec

版本:Ubuntu 12.04 LTS   (裝了ubuntu還想要文字介面的矯情人果真有。。。) 話說修改Ubuntu的啟動級別不像其他distribution那樣改個/etc/inittab就ok了的。 先講講修改的方法一: 步驟一:修改預設啟動的runl

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="88f0e1e9e6efe2e1edbdbdc8f9f9a6ebe7e5">[email&#160;protec

定義標頭檔案     QPoint move_point; //移動的距離     bool mouse_press; //按下滑鼠左鍵 protected:     void mousePressE

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="176f7e7679707d7e7222225766663974787a">[email&#160;protec

確實,在檢視定義比較複雜的情況下,要對檢視操作進行有效的優化是非常困難的。因此在這個時候,MySQL使用了一種以不變應萬變的方法,即先執行檢視定義,將其結果使用臨時表儲存起來,這樣後續對檢視的操作就轉化為對臨時表的操作。不能不說從單從軟體設計的角度看,這樣的方法非常的優雅,然而從效能角度,這一方法也是非常的差

kevin_xiang專欄,mail: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e8908189868f82818ddddda89999c68b8785">[email&#160;protec

http://www.zgguan.com/zsfx/mysql/3598.html mysql中如果我們開啟bin-log日誌全在mysql目錄發現大量的mysql-bin.000001,mysql-bin.000002等這些文章,如果多了會發現佔很大的空間,下面我

richard的專欄(<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="31535856555045501f59505f71565c50585d1f525e5c">[email&#160;protecte

#!/bin/bash time=`date -d yesterday +"%Y-%m-%d"` /usr/bin/find  /data/mysql/apm-3306/log/ -name 'apm-slow-*' -mtime +7|xargs rm -rf ; mv

<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4e1d2b2f3d21200e062f20291426213b">[email&#160;protected]a> 專欄

 flv檔案主要由兩部分組成:header和body。 1.header header部分記錄了flv的型別、版本等資訊,是flv的開頭,一般都差不多,佔9bytes。具體格式如下: 檔案型別 3 bytes “FLV” 版本 1 byte 一般為0x01

<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5a2d322f1a22333b2b2f3b346d686f">[email&#160;protected]a>的專欄

(一)     C語言篇 C語言求職血淚史 華為(實習):機試、一面、性格測試被鄙視、優招被鄙視、普招被鄙視 銳捷:筆試、面試莫名其妙被鄙視 創新工場:筆試、一面、二面、offer 阿里巴巴:筆試被鄙視 cvte:網測、面試沒去 大眾點評:網測悲劇 IGT:筆試、一面、二面