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

看UNIX高手的10個習慣

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

清單 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 命令不只用于傳遞文件名。您還可以在需要將文本篩選到單個行中的任何時候使用它:


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

~/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 $



謹慎使用 xargs 

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



 


 回頁首 




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

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


清單 17. 好習慣 8 的示例:使用和不使用 grep 的行計數(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 選項還是執(zhí)行計數(shù)的好方法。對于多個文件,帶 -c 選項的 grep 返回每個文件的單獨計數(shù),每行一個計數(shù),而針對 wc 的管道則提供所有文件的組合總計數(shù)。

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


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

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



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



 


 回頁首 




匹配輸出中的某些字段,而不只是對行進行匹配

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

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


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


清單 20. 好習慣 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 的更多詳細信息,請參見參考資料。



 


 回頁首 




停止對 cat 使用管道

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


清單 21. 好習慣和壞習慣 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
~ $ 



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



 


 回頁首 




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

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

相關(guān)文章

最新評論