您可以連接在一起,使兩個命令從一個程序的輸出成為下一個程序的輸入。以這種方式連接的兩個或多個命令可以形成一個管。
要制作一個管道,放了兩個命令在命令行之間的豎線(|)。
當(dāng)一個程序?qū)⑵鋸牧硪粋€程序的輸入,該輸入執(zhí)行某些操作,并寫入到標(biāo)準(zhǔn)輸出的結(jié)果,它被稱為作為一個過濾器。
grep程序搜索一個或多個文件的??行有一定的模式。語法是:
$grep pattern file(s)
這個名字源于“grep”的ED(UNIX行編輯器)命令g/re/p指“全局搜索所有包含一個正則表達(dá)式和打印。”
正則表達(dá)式是一些純文本(一個字,例如)和/或特殊字符用于模式匹配。
grep最簡單的用法是看一個字組成的一個模式。它可以用在管道中,因而只有那些行包含一個給定的字符串的輸入文件被發(fā)送到標(biāo)準(zhǔn)輸出。如果你不給grep的讀取一個文件名時,它讀取標(biāo)準(zhǔn)輸入的所有過濾方案的工作方式:
$ls -l | grep "Aug" -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $
有各種不同的選項,可以一起使用grep命令:
| Option | 描述 |
|---|---|
| -v | Print all lines that do not match pattern. |
| -n | Print the matched line and its line number. |
| -l | Print only the names of files with matching lines (letter "l") |
| -c | Print only the count of matching lines. |
| -i | Match either upper- or lowercase. |
接下來,讓我們使用一個正則表達(dá)式,告訴grep來查找線“carol”,由零個或多個其他字符在正則表達(dá)式簡稱為“*”),再其次是“Aug”。
在這里,我們使用-i選項來區(qū)分大小寫的搜索:
$ls -l | grep -i "carol.*aug" -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros $
sort命令安排行的文字,字母或數(shù)字。下面的例子各種行在food文件:
$sort food Afghani Cuisine Bangkok Wok Big Apple Deli Isle of Java Mandalay Sushi and Sashimi Sweet Tooth Tio Pepe's Peppers $
sort命令默認(rèn)情況下,按字母順序排列的文本行。有很多的選擇,控制排序:
| Option | 描述 |
|---|---|
| -n | Sort numerically (example: 10 will sort after 2), ignore blanks and tabs. |
| -r | Reverse the order of sort. |
| -f | Sort upper- and lowercase together. |
| +x | Ignore first x fields when sorting. |
超過兩個命令可以鏈接到一個管道。以先前的管道使用grep的例子,我們可以進(jìn)一步在August 修改的文件大小順序進(jìn)行排序。
下面的管道由命令ls,grep和排序:
$ls -l | grep "Aug" | sort +4n -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 -rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02 $
August 大小順序修改這條管道在你的目錄中的所有文件進(jìn)行排序,并將它們打印到終端屏幕。行數(shù)字順序排序選項+4Ñ跳過四個字段(字段由空格分隔),然后排序。
一個長的輸出通常會壓縮在屏幕上,但如果你運(yùn)行文本通過或pg作為一個過濾器,每屏顯示的文本后,顯示停止。
讓我們假設(shè)你有一個長的目錄列表。為了使其更易于閱讀排序列表,通過管道輸出如下:
$ls -l | grep "Aug" | sort +4n | more -rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros -rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro -rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07 下一篇:Unix 文件系統(tǒng)基礎(chǔ)