Linux 中的 Pipe,Grep 和 Sort 命令

什麼是 Linux 中的管道

管道是 Linux 中的一個命令,它允許你使用兩個或多個命令,以便一個命令的輸出作為下一個命令的輸入。簡而言之,每個程序的輸出像管道一樣直接作為輸入到下一個。符號 | 表示管道。

管道可幫助你同時混合兩個或多個命令並連續執行它們。你可以使用功能強大的命令,可以快速執行復雜的任務。

讓我們用一個例子來理解這一點。

當你使用 cat 命令檢視跨越多個頁面的檔案時,提示會快速跳轉到檔案的最後一頁,而你在中間看不到內容。

為避免這種情況,你可以將 cat 命令的輸出傳遞給 less,這樣一次只能顯示一個滾動長度的內容。

cat filename | less 

pgmore 命令

你也可以使用 pg,而不是 less

cat Filename | pg 

或者

cat Filename | more

這樣,你可以悠閒地檢視檔案,只需按Enter鍵向下滾動即可。

$ cat Filename | more
First
Second
Third
--More--

grep 命令

假設你要從文字檔案中搜尋特定的郵政編碼,當然你可以自己手動瀏覽內容以查詢資訊。但更好的選擇是使用 grep 命令。它將掃描文件以獲取所需資訊,並以你想要的格式顯示結果。

grep search_string

舉個例子,

$ cat testfile | grep Monday
Monday

在這裡,grep 命令搜尋檔案 testfile,搜尋字串 Monday

以下選項可與此命令一起使用。

選項 功能
-v 顯示與搜尋到的字串不匹配的所有行
-c 僅顯示匹配行的數量
-n 顯示匹配的行及其編號
-i 匹配時不區分大小寫
-l 僅顯示含有字串的檔名

讓我們試一下在同一個檔案上面使用第一個選項 -i

使用 -i 選項,grep 已從所有行中過濾出字串 a(不區分大小寫)。

$ cat testfile | grep -i a
Apple
Banana
Goat

sort 命令

此命令有助於按字母順序排序檔案內容。

該命令的語法是:

sort Filename

比如檔案 abc 的內容是,

dishan@vultr:~$ cat abc
a
b
c
d
e

使用 sort 命令

dishan@vultr:~$ sort abc
a
b
c
d
e

這個命令的選項如下,

選項 功能
-r 反轉排序
-n 按數字排序
-f 不區分大小寫的排序

下面的例子將檔案 abc 中內容反向排序。

dishan@vultr:~$ sort - r abc
e
d
c
b
a

什麼是過濾器?

Linux 有很多過濾命令,如 awkgrepsedspellwc。過濾器從一個命令獲取輸入,進行一些處理,並給出輸出。

當你管道兩個命令時,第一個命令的過濾輸出將被賦予下一個命令。

讓我們藉助一個例子來理解這一點。

檔案 sample 的內容是,

dishan@vultr:~$ cat sample
Cat
Tiger
Apple
Poes
Banana
Drink

我們想列出不包含字元 a 的行,但結果按反順排列。

為此,可以使用以下語法。

cat sample | grep -v a | sort - r

讓我們看看結果。

dishan@vultr:~$ cat sample | grep -v a | sort - r
Drink
Poes
Tiger
Poes

複習:

  • 管道 | 傳送一個命令的輸出作為另一個命令的輸入。
  • 過濾器從一個命令獲取輸入,進行一些處理,並給出輸出。
  • grep 命令可用於在文字文件中查詢字串和值
  • 通過 grep 的管道是最常用的用法之一
  • sort 命令按字母順序排序檔案內容
  • lesspgmore 命令用於將長檔案分成可讀位