1. 程式人生 > >7、linux命令執行順序控制與管道

7、linux命令執行順序控制與管道

cut,grep,wc,sort命令的使用
管道的理解
簡單的順序執行你可以使用;來完成,比如上述操作你可以:

sudo apt-get update;sudo apt-get insatll some-tool;some-tool

結合&&||來實現一些操作

$ which cowsay>/dev/null && echo "exist" || echo "not exist"

管道

管道是什麼,管道是一種通訊機制,通常用於程序間的通訊(也可通過socket進行網路通訊),它表現出來的形式就是將前面每一個程序的輸出(stdout)直接作為下一個程序的輸入(stdin)。

管道又分為匿名管道和具名管道(這裡將不會討論在源程式中使用系統呼叫建立並使用管道的情況,它與命令列的管道在核心中實際都是採用相同的機制)。我們在使用一些過濾程式時經常會用到的就是匿名管道,在命令列中由|分隔符表示,|在前面的內容中我們已經多次使用到了。具名管道簡單的說就是有名字的管道,通常只會在源程式中用到具名管道。下面我們就將通過一些常用的可以使用管道的”過濾程式”來幫助你熟練管道的使用。

試用

ls -al /etc | less

cut 命令,列印每一行的某一欄位

列印/etc/passwd檔案中以:為分隔符的第1個欄位和第6個欄位分別表示使用者名稱和其家目錄:

cut /etc/passwd -d
':' -f 1,6
# 前五個(包含第五個)
$ cut /etc/passwd -c -5
# 前五個之後的(包含第五個)
$ cut /etc/passwd -c 5-
# 第五個
$ cut /etc/passwd -c 5
# 2到5之間的(包含第五個)
$ cut /etc/passwd -c 2-5

grep命令,在文字中或stdin中查詢匹配字串

grep命令是很強大的,也是相當常用的一個命令,它結合正則表示式可以實現很複雜卻很高效的匹配和查詢,不過在學習正則表示式之前,這裡介紹它簡單的使用,而關於正則表示式後面將會有單獨一小節介紹到時會再繼續學習grep命令和其他一些命令。

grep

命令的一般形式為:

grep [命令選項]... 用於匹配的表示式 [檔案]...

還是先體驗一下,我們搜尋/home/shiyanlou目錄下所有包含”shiyanlou”的所有文字檔案,並顯示出現在文字中的行號:

$ grep -rnI "shiyanlou" ~

-r 引數表示遞迴搜尋子目錄中的檔案,-n表示列印匹配項行號,-I表示忽略二進位制檔案。這個操作實際沒有多大意義,但可以感受到grep命令的強大與實用。

當然也可以在匹配欄位中使用正則表示式,下面簡單的演示:

# 檢視環境變數中以"yanlou"結尾的字串
$ export | grep ".*yanlou$"

其中$就表示一行的末尾。

wc命令,簡單小巧的計數工具

wc 命令用於統計並輸出一個檔案中行、單詞和位元組的數目,比如輸出/etc/passwd檔案的統計資訊:

# 行數
$ wc -l /etc/passwd
# 單詞數
$ wc -w /etc/passwd
# 位元組數
$ wc -c /etc/passwd
# 字元數
$ wc -m /etc/passwd
# 最長行位元組數
$ wc -L /etc/passwd

sort排序命令

這個命令前面我們也是用過多次,功能很簡單就是將輸入按照一定方式排序,然後再輸出,它支援的排序有按字典排序,數字排序,按月份排序,隨機排序,反轉排序,指定特定欄位進行排序等等。
預設字典排序:
cat /etc/passwd | sort
反轉排序:
cat /etc/passwd | sort -r
按特定欄位排序:
cat /etc/passwd | sort -t':' -k 3
按特定欄位排序按數字排序:
cat /etc/passwd | sort -t ':' -k 3 -n

uniq去重命令

使用以前介紹過的方法,安裝aviewimagemagick,然後用asciiview命令顯示圖片,使用方法可以用 man 命令檢視。

wget http://labfile.oss.aliyuncs.com/courses/1/Linus.png