日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

使用 UNIX 進(jìn)行文本處理( 四 )


對(duì)了,還有最后一個(gè)內(nèi)容,通過(guò)使用字符對(duì)其進(jìn)行轉(zhuǎn)義,您可以在模式中使用這些特殊字符的字面內(nèi)容(即作為其本身) 。
將其組合在一起
既然已經(jīng)向您介紹了一些非常簡(jiǎn)單的正則表達(dá)式,那么讓我們來(lái)嘗試一些有用的內(nèi)容 。給定 ls -l(文件長(zhǎng) 清單)的輸出,您將從中提取權(quán)限信息、大小和名稱(chēng) 。清單 14 顯示了要進(jìn)行處理的 ls -l 輸出示例 。
清單 14. ls -l 的典型輸出
chrish@dhcp3 [365]$ ls -l | tail
drwx------3 chrishwheel102 Jun 14 21:38 gsrvdir501
drwxr-xr-x2 chrishwheel68 Jun 16 16:01 hsperfdata_chrish
drwxr-xr-x3 root wheel102 Jun 14 23:38 hsperfdata_root
-rw-r--r--1 root wheel531 Jun 14 10:17
Illustrator_activation.plist
-rw-r--r--1 root wheel531 Jun 14 10:10 indesign_activation.plist
-rw-------1 nobodywheel24 Jun 16 16:01 objc_sharing_ppc_4294967294
-rw-------1 chrishwheel132 Jun 16 23:50 objc_sharing_ppc_501
-rw-------1 security wheel24 Jun 16 10:04 objc_sharing_ppc_92
-rw-r--r--1 root wheel531 Jun 14 10:05 Photoshop_activation.plist
-rw-r--r--1 root wheel928 Jun 14 10:17 serialinfo.plist
正如您所看到的,這里一共有 7 列:
權(quán)限 鏈接的數(shù)目 屬主 組 大小 最后的修改時(shí)間 名稱(chēng)讓我們來(lái)建立一些正則表達(dá)式,以匹配其中的每一列:
.([r-][w-][x-]){3}—權(quán)限(使用 . 匹配第一個(gè)字符,因?yàn)樗赡苁菐讉€(gè)不同的特殊字符中的任何一個(gè) 。) [[:digit:]] —鏈接的數(shù)目 [A-Za-z0-9_-.]-—屬主(您還可以使用這個(gè)模式進(jìn)行組匹配 。) [[:digit:]] —大小 .{3} [0-9 ]{2} [0-9 ][0-9]:[0-9][0-9]—修改時(shí)間(您可以對(duì)這個(gè)模式進(jìn)行一些簡(jiǎn)化,因?yàn)樗械奈募荚?6 月份進(jìn)行的修改,所以您可以確切地指定月份的名稱(chēng) 。) . $—名稱(chēng)(在這些內(nèi)容之后,您需要匹配所有的字符,直到行尾 。)在上述模式之間,必須使用 [[:space:]]對(duì)它們進(jìn)行連接,因?yàn)槟⒉恢肋@些列之間究竟是使用空格或制表符,還是兩者的組合進(jìn)行分隔 。您還需要將權(quán)限、大小和名稱(chēng)放到組中,以便可以在替換中使用它們 。如清單 15 所示,正則表達(dá)式很快就變得難以理解 。
清單 15. 完成后的正則表達(dá)式實(shí)在難以理解!
(.([r-][w-][x-]){3})[[:space:]] [[:digit:]] [[:space:]] ([A-Za-z0-9_-.]
[[:space:]] ){2}([[:digit:]] )[[:space:]] .{3} [0-9 ]{2} [0-9
][0-9]:[0-9][0-9][[:space:]] (. )$
如果您仔細(xì)研究這個(gè)可怕的正則表達(dá)式模式,您將發(fā)現(xiàn) 5 個(gè)組:
完整的權(quán)限塊 權(quán)限塊中最后匹配的 rwx 組 組(該模式的屬主/組部分中最后匹配的內(nèi)容) 大小 名稱(chēng)在清單 16 中,您將更改 ls -l 的輸出以顯示文件名、權(quán)限和大小 。
清單 16. 對(duì)輸出進(jìn)行重組
chrish@dhcp3 [382]$ ls -l | tail | sed -E
's/(.([r-][w-][x-]){3})[[:space:]] [[:digit:]] [[:space:]] ([A-Za-z0-9_-.
] [[:space:]] ){2}([[:digit:]] )[[:space:]] .{3} [0-9 ]{2} [0-9
][0-9]:[0-9][0-9][[:space:]] (. )$/5 (1) has 4 bytes of data/'
gsrvdir501 (drwx------) has 102 bytes of data
hsperfdata_chrish (drwxr-xr-x) has 68 bytes of data
hsperfdata_root (drwxr-xr-x) has 102 bytes of data
Illustrator_activation.plist (-rw-r--r--) has 531 bytes of data
indesign_activation.plist (-rw-r--r--) has 531 bytes of data
objc_sharing_ppc_4294967294 (-rw-------) has 24 bytes of data
objc_sharing_ppc_501 (-rw-------) has 132 bytes of data
objc_sharing_ppc_92 (-rw-------) has 24 bytes of data
Photoshop_activation.plist (-rw-r--r--) has 531 bytes of data
serialinfo.plist (-rw-r--r--) has 928 bytes of data
成功了!您已經(jīng)完成了對(duì)輸出結(jié)果的轉(zhuǎn)換 。
使用 Perl 完成相應(yīng)的工作
Perl 編程和腳本語(yǔ)言(請(qǐng)參見(jiàn)參考資料部分)的功能非常強(qiáng)大,通??捎脕?lái)取代前面介紹的 tr 和 sed 命令 。通??梢栽诿钚兄兄苯虞斎牒?jiǎn)短的 Perl 程序,有時(shí)它可以完成比 tr 或 sed 命令行更多的操作 。

推薦閱讀