歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux管道和過濾器 使用教程

有時候,我們可以把兩個命令連起來使用,一個命令的輸出作為另一個命令的輸入,這就叫做管道。為了建立管道,需要在兩個命令之間使用豎線(|)連接。

管道是Linux進程之間一種重要的通信機制;除了管道,還有共享內存、消息隊列、信號、套接字(socket) 等進程通信機制。

管道使用豎線(|)將兩個命令隔開,豎線左邊命令的輸出就會作為豎線右邊命令的輸入。連續使用豎線表示第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。

能夠接受數據,過濾(處理或篩選)後再輸出的工具,稱為過濾器

grep命令

grep 是一個強大的文本搜索工具,可以使用正則表達式,並返回匹配的行,語法為:

$grep pattern file(s)

“grep”源於 ed(Linux的一個行文本編輯器)的 g/re/p 命令,g/re/p 是“globally search for a regular expression and print all lines containing it”的縮寫,意思是使用正則表達式進行全局檢索,並把匹配的行打印出來。

正則表達式是一個包含了若干特殊字符的字符串,每個字符都有特殊含義,可以用來匹配文本,更多信息請查看正則表達式教程

grep 可以看做是一個過濾器,如果沒有為 grep 指定要檢索的文件,那麼它會從標准輸入設備(一般是鍵盤)讀取;其他過濾器也是如此。

grep 命令最簡單的使用就是檢索包含固定字符的文本。

例如,在管道中使用 grep 命令,只允許包含指定字符的行輸出到顯示器:

$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 命令有很多選項:

選項 說明 -v 反轉查詢,輸出不匹配的行。例如,grep -v “test” demo.txt 將輸出不包含”test”的行。 -n 輸出匹配的行以及行號。 -l 輸出匹配的行所在的文件名。 -c 輸出匹配的總行數。 -i 不區分大小寫進行匹配。

下面我們使用正則表達式來匹配這樣的行:包含字符“carol”,然後包含任意數目(含零個)的其他字符,最後還要包含“Aug”。

使用 -i 選項進行不區分大小寫的匹配:

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

sort命令

sort 命令在 Linux 中非常有用,它將文件中的各行按字母或數進行排序。sort命令既可以從特定的文件,也可以從stdin獲取輸入。

例如,對 foot 文件的各行進行排序:

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

通過下面的選項可以控制排序規則:

選項 描述 -n 按照數字大小排序,例如,10會排在2後面;-n 選項會忽略空格或 tab縮進。 -r 降序排序。sort 默認是升序排序。 -f 不區分大小寫。 +x 對第x列(從0開始)進行排序。

下面的例子通過管道將 ls、grep 和 sort 命令連起來使用,過濾包含“Aug”的行,並按照文件大小排序:

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

上面的命令,對當前目錄中八月份修改的文件按照大小排序;+4n 表示對第5列按照數字大小排序。

pg和more命令

如果文件內容過多,全部顯示會很亂,可以使用 pgmore 命令分頁顯示,每次只顯示一屏。

例如,通過管道,使用more命令顯示目錄中的文件:

$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
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
.
.
.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

如上,一次只顯示一屏文本,顯示滿後,停下來,並提示已顯示全部內容的百分比,按空格鍵(space)可以查看下一屏,按 b 鍵可以查看上一屏。

Copyright © Linux教程網 All Rights Reserved