Unix / Linux - Pipes and Filters

你好,未來的Unix/Linux大師!今天,我們將踏上一段令人興奮的旅程,探索管道和過濾器的世界。別擔心你對編程是新手——我會一步步引導你,就像我這些年來對無數學生所做的一樣。我們一起來看看吧!

Unix / Linux - Pipes & Filters

Pipes和Filters是什麼?

在我們深入細節之前,讓我們先了解管道和過濾器是什麼。想像你正在廚房裡準備一頓美味的餐點。你有一些不同的用具,每個都執行特定的任務——一把刀用來切東西,一個攪拌器用來混合,一個篩子用來篩東西!在Unix/Linux中,管道和過濾器的工作方式也很類似。

  • 過濾器是接收輸入,處理它,然後產生輸出的命令。
  • 管道是連接這些過濾器的「管道」,讓數據從一個命令流到另一個命令。

它們一起形成了一個強大的系統,用以處理和操作數據。現在,讓我們看看一些最常見且最有用的命令。

grep命令

grep是什麼?

grep代表「Global Regular Expression Print」。它就像一個超級搜索工具,幫助你在文本中找到特定的模式。

基本使用方法

這裡是基本的語法:

grep [選項] 模式 [文件...]

讓我們從一個簡單的例子開始。假設我們有一個名為fruits.txt的文件,內容如下:

apple
banana
cherry
date
elderberry
fig
grape

如果我們想找到所有包含字母'a'的水果,我們可以使用:

grep 'a' fruits.txt

這將輸出:

apple
banana
grape

有用的選項

這裡有一些grep的有用選項:

選項 描述
-i 忽略大小寫
-v 反轉匹配(顯示不匹配的行)
-n 顯示行號
-c 計算匹配行數

讓我們試一試:

grep -i 'A' fruits.txt  # 尋找'A'或'a'
grep -v 'a' fruits.txt  # 尋找不含'a'的行
grep -n 'e' fruits.txt  # 顯示含'e'的行的行號
grep -c 'r' fruits.txt  # 計算含'r'的行數

sort命令

sort是什麼?

sort的作用正如其名——它會排序!就像有一個有用的助手,能夠快速地將你的數據按照字母或數字順序排列。

基本使用方法

基本語法是:

sort [選項] [文件...]

使用我們的fruits.txt文件:

sort fruits.txt

這將輸出:

apple
banana
cherry
date
elderberry
fig
grape

有用的選項

這裡有一些sort的常見選項:

選項 描述
-r 反轉順序
-n 按數字排序
-u 刪除重複
-k 按特定字段排序

讓我們試一試:

sort -r fruits.txt  # 反轉字母順序

現在,讓我們創建一個名為numbers.txt的文件,裡面有一些數字:

5
2
8
1
3

我們可以將它們按數字排序:

sort -n numbers.txt

pg和more命令

pg和more是什麼?

pgmore是分頁程序。它們就像有禮的服務員,一次為你提供一頁數據,而不是一次性把所有的數據都丟給你。

基本使用方法

對於more

more [選項] [文件...]

對於pg

pg [選項] [文件...]

讓我們試試more。我們將創建一個名為long_text.txt的文件,裡面有本教程的內容:

more long_text.txt

這將一次顯示一屏內容。按空格鍵查看下一頁,或者按'q'退出。

pg的工作方式類似,但提供了更多功能:

pg long_text.txt

使用pg,你可以使用:n進入下一頁,:p回到前一頁,和/pattern搜索文本。

結合所有命令:管道的力量

現在來到令人興奮的部分——將這些命令與管道結合!管道符號'>'將一個命令的輸出連接到另一個命令的輸入。

讓我們創建一個名為employees.txt的文件,內容如下:

Alice,Sales,50000
Bob,Marketing,45000
Charlie,Engineering,60000
David,Sales,55000
Eve,Marketing,48000
Frank,Engineering,62000

現在,讓我們使用管道來做一些魔法:

grep 'Sales' employees.txt | sort -k3 -nr

這個命令做了兩件事:

  1. grep 'Sales' employees.txt尋找所有包含'Sales'的行
  2. 輸出然後通過管道傳遞給sort -k3 -nr,這會按數字(-n)反轉(-r)排序第三字段(-k3),也就是薪水。

結果如下:

David,Sales,55000
Alice,Sales,50000

這不是很酷嗎?我們已經過濾和排序數據了!

結論

好了,各位!我們已經穿越了管道和過濾器的領地,見識了強大的grep,有序的sort,以及耐心的morepg。記住,熟練才能生巧。嘗試以不同的方式結合這些命令,你很快就能成為Unix/Linux管道大師!

快樂編程,願你的管道永遠暢通,過濾器永遠清潔!

Credits: Image by storyset