欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

看UNIX高手的10個(gè)習(xí)慣第2/2頁

 更新時(shí)間:2008年05月19日 19:56:27   作者:  
采用 10 個(gè)能夠提高您的 UNIX® 命令行效率的好習(xí)慣——并在此過程中擺脫不良的使用模式。本文循序漸進(jìn)地指導(dǎo)您學(xué)習(xí)幾項(xiàng)用于命令行操作的技術(shù),這些技術(shù)非常好,但是通常被忽略。了解常見錯(cuò)誤和克服它們的方法,以便您能夠確切了解為何值得采用這些 UNIX 習(xí)慣。

清單 15. xargs 工具的使用示例

~/tmp $ ls -1 | xargs
December_Report.pdf README a archive.tar mkdirhier.sh
~/tmp $ ls -1 | xargs file
December_Report.pdf: PDF document, version 1.3
README: ASCII text
a: directory
archive.tar: POSIX tar archive
mkdirhier.sh: Bourne shell script text executable
~/tmp $



xargs 命令不只用于傳遞文件名。您還可以在需要將文本篩選到單個(gè)行中的任何時(shí)候使用它:


清單 16. 好習(xí)慣 7 的示例:使用 xargs 工具來將文本篩選到單個(gè)行中

~/tmp $ ls -l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $



謹(jǐn)慎使用 xargs 

從技術(shù)上講,使用 xargs 很少遇到麻煩。缺省情況下,文件結(jié)束字符串是下劃線 (_);如果將該字符作為單個(gè)輸入?yún)?shù)來發(fā)送,則它之后的所有內(nèi)容將被忽略。為了防止這種情況發(fā)生,可以使用 -e 標(biāo)志,它在不帶參數(shù)的情況下完全禁用結(jié)束字符串。



 


 回頁首 




了解何時(shí) grep 應(yīng)該執(zhí)行計(jì)數(shù)——何時(shí)應(yīng)該繞過

避免通過管道將 grep 發(fā)送到 wc -l 來對輸出行數(shù)計(jì)數(shù)。grep 的 -c 選項(xiàng)提供了對與特定模式匹配的行的計(jì)數(shù),并且一般要比通過管道發(fā)送到 wc 更快,如以下示例所示:


清單 17. 好習(xí)慣 8 的示例:使用和不使用 grep 的行計(jì)數(shù)

~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real    0m0.097s
user    0m0.006s
sys     0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real    0m0.013s
user    0m0.006s
sys     0m0.005s
~ $ 



除了速度因素外,-c 選項(xiàng)還是執(zhí)行計(jì)數(shù)的好方法。對于多個(gè)文件,帶 -c 選項(xiàng)的 grep 返回每個(gè)文件的單獨(dú)計(jì)數(shù),每行一個(gè)計(jì)數(shù),而針對 wc 的管道則提供所有文件的組合總計(jì)數(shù)。

然而,不管是否考慮速度,此示例都表明了另一個(gè)要避免地常見錯(cuò)誤。這些計(jì)數(shù)方法僅提供包含匹配模式的行數(shù)——如果那就是您要查找的結(jié)果,這沒什么問題。但是在行中具有某個(gè)特定模式的多個(gè)實(shí)例的情況下,這些方法無法為您提供實(shí)際匹配實(shí)例數(shù)量 的真實(shí)計(jì)數(shù)。歸根結(jié)底,若要對實(shí)例計(jì)數(shù),您還是要使用 wc 來計(jì)數(shù)。首先,使用 -o 選項(xiàng)(如果您的版本支持它的話)來運(yùn)行 grep 命令。此選項(xiàng)僅 輸出匹配的模式,每行一個(gè)模式,而不輸出行本身。但是您不能將它與 -c 選項(xiàng)結(jié)合使用,因此要使用 wc -l 來對行計(jì)數(shù),如以下示例所示:


清單 18. 好習(xí)慣 8 的示例:使用 grep 對模式實(shí)例計(jì)數(shù)

~ $ grep -o and tmp/a/longfile.txt | wc -l
3402
~ $



在此例中,調(diào)用 wc 要比第二次調(diào)用 grep 并插入一個(gè)虛擬模式(例如 grep -c)來對行進(jìn)行匹配和計(jì)數(shù)稍快一點(diǎn)。



 


 回頁首 




匹配輸出中的某些字段,而不只是對行進(jìn)行匹配

當(dāng)您只希望匹配輸出行中特定字段 中的模式時(shí),諸如 awk 等工具要優(yōu)于 grep。

下面經(jīng)過簡化的示例演示了如何僅列出 12 月修改過的文件。


清單 19. 壞習(xí)慣 9 的示例:使用 grep 來查找特定字段中的模式

~/tmp $ ls -l /tmp/a/b/c | grep Dec
-rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
-rw-r--r--  1 root root  238 Dec 03 08:19 README
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
~/tmp $



在此示例中,grep 對行進(jìn)行篩選,并輸出其修改日期和名稱中帶 Dec 的所有文件。因此,諸如 December_Report.pdf 等文件是匹配的,即使它自從一月份以來還未修改過。這可能不是您希望的結(jié)果。為了匹配特定字段中的模式,最好使用 awk,其中的一個(gè)關(guān)系運(yùn)算符對確切的字段進(jìn)行匹配,如以下示例所示:


清單 20. 好習(xí)慣 9 的示例:使用 awk 來查找特定字段中的模式

~/tmp $ ls -l | awk '$6 == "Dec"'
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
-rw-r--r--  1 root root  238 Dec 03 08:19 README
~/tmp $



有關(guān)如何使用 awk 的更多詳細(xì)信息,請參見參考資料。



 


 回頁首 




停止對 cat 使用管道

grep 的一個(gè)常見的基本用法錯(cuò)誤是通過管道將 cat 的輸出發(fā)送到 grep 以搜索單個(gè)文件的內(nèi)容。這絕對是不必要的,純粹是浪費(fèi)時(shí)間,因?yàn)橹T如 grep 這樣的工具接受文件名作為參數(shù)。您根本不需要在這種情況下使用 cat,如以下示例所示:


清單 21. 好習(xí)慣和壞習(xí)慣 10 的示例:使用帶和不帶 cat 的 grep

~ $ time cat tmp/a/longfile.txt | grep and
2811

real    0m0.015s
user    0m0.003s
sys     0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real    0m0.010s
user    0m0.006s
sys     0m0.004s
~ $ 



此錯(cuò)誤存在于許多工具中。由于大多數(shù)工具都接受使用連字符 (-) 的標(biāo)準(zhǔn)輸入作為一個(gè)參數(shù),因此即使使用 cat 來分散 stdin 中的多個(gè)文件,參數(shù)也通常是無效的。僅當(dāng)您使用帶多個(gè)篩選選項(xiàng)之一的 cat 時(shí),才真正有必要在管道前首先執(zhí)行連接。



 


 回頁首 




結(jié)束語:養(yǎng)成好習(xí)慣

最好檢查一下您的命令行習(xí)慣中的任何不良的使用模式。不良的使用模式會(huì)降低您的速度,并且通常會(huì)導(dǎo)致意外錯(cuò)誤。本文介紹了 10 個(gè)新習(xí)慣,它們可以幫助您擺脫許多最常見的使用錯(cuò)誤。養(yǎng)成這些好習(xí)慣是加強(qiáng)您的 UNIX 命令行技能的積極步驟。

相關(guān)文章

最新評論