(十一)命令執(zhí)行順序控制與管道

一篓跛、實(shí)驗(yàn)介紹

1.1 實(shí)驗(yàn)內(nèi)容

順序執(zhí)行、選擇執(zhí)行坦刀、管道愧沟、cut 命令、grep 命令鲤遥、wc 命令沐寺、sort 命令、uniq命令盖奈、head命令等混坞,高效率使用 Linux 的技巧。

1.2 實(shí)驗(yàn)知識(shí)點(diǎn)

cut钢坦,grep究孕,wc,sort命令的使用爹凹,管道的理解

二厨诸、命令執(zhí)行順序的控制

2.1 順序執(zhí)行多條命令

通常情況下,我們每次只能在終端輸入一條命令禾酱,按下回車執(zhí)行微酬,執(zhí)行完成后,我們再輸入第二條命令颤陶,然后再按回車執(zhí)行…… 你可能會(huì)遇到如下使用場景:我需要使用apt-get
安裝一個(gè)軟件颗管,然后安裝完成后立即運(yùn)行安裝的軟件(或命令工具),又恰巧你的主機(jī)才更換的軟件源還沒有更新軟件列表(比如之前我們的環(huán)境中指郁,每次重新開始實(shí)驗(yàn)就得sudo apt-get update忙上,現(xiàn)在已經(jīng)沒有這個(gè)問題了),那么你可能會(huì)有如下一系列操作:

$ sudo apt-get update   
# 等待——————————然后輸入下面的命令
$ sudo apt-get install some-tool   
# 等待——————————然后輸入下面的命令
$ some-tool

這時(shí)你可能就會(huì)想要是我可以一次性輸入完,讓它自己去依次執(zhí)行各命令就好了闲坎,這就是我們這一小節(jié)要解決的問題疫粥。簡單的順序執(zhí)行你可以使用;來完成,比如上述操作你可以

$ sudo apt-get update;sudo apt-get install some-tool;some-tool
# 讓它自己運(yùn)行

2.2 有選擇的執(zhí)行命令

關(guān)于上面的操作腰懂,不知你有沒有思考過一個(gè)問題梗逮,如果我們在讓它自動(dòng)順序執(zhí)行命令時(shí),前面的命令執(zhí)行不成功绣溜,而后面的命令又依賴與上一條命令的結(jié)果慷彤,那么就會(huì)造成花了時(shí)間,最終卻得到一個(gè)錯(cuò)誤的結(jié)果,而且有時(shí)候直觀的看你還無法判斷結(jié)果是否正確底哗。那么我們需要能夠有選擇性的來執(zhí)行命令岁诉,比如上一條命令執(zhí)行成功才繼續(xù)下一條,或者不成功又該做出其它什么處理,比如我們使用which來查找是否安裝某個(gè)命令跋选,如果找到就執(zhí)行該命令涕癣,否則什么也不做(雖然這個(gè)操作沒有什么實(shí)際意義,但可幫你更好的理解一些概念):

$ which cowsay>/dev/null && cowsay -f head-in ohch~

你如果沒有安裝cowsay前标,你可以先執(zhí)行一次上述命令坠韩,你會(huì)發(fā)現(xiàn)什么也沒發(fā)生,你再安裝好之后你再執(zhí)行一次上述命令炼列,你也會(huì)發(fā)現(xiàn)一些驚喜只搁。上面的&&就是用來實(shí)現(xiàn)選擇性執(zhí)行的,它表示如果前面的命令執(zhí)行結(jié)果(不是表示終端輸出的內(nèi)容俭尖,而是表示命令執(zhí)行狀態(tài)的結(jié)果)返回0則執(zhí)行后面的氢惋,否則不執(zhí)行,你可以從$?環(huán)境變量獲取上一次命令的返回結(jié)果:

image.png

學(xué)習(xí)過 C 語言的用戶應(yīng)該知道在 C 語言里面&&表示邏輯與目溉,而且還有一個(gè)||表示邏輯或明肮,同樣 Shell 也有一個(gè)||,它們的區(qū)別就在于缭付,shell中的這兩個(gè)符號除了也可用于表示邏輯與和或之外,就是可以實(shí)現(xiàn)這里的命令執(zhí)行順序的簡單控制循未。

$ which cowsay>/dev/null || echo "cowsay has not been install, please run 'sudo apt-get install cowsay' to install"

除了上述基本的使用之外陷猫,我們還可以結(jié)合這&&和||來實(shí)現(xiàn)一些操作,比如:

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

我畫個(gè)流程圖來解釋一下上面的流程:


思考

上面我們講到將&&和||結(jié)合起來使用的妖,那么是否以任意順序都行绣檬?比如上面我們是&&在前||在后,反過來可以么嫂粟?會(huì)不會(huì)有問題娇未? 。星虹。零抬。】碛浚肯定不行啊

如果第一個(gè)命令執(zhí)行成功平夜,與操作符 (&&)才會(huì)執(zhí)行第二個(gè)命令
如果第一個(gè)命令執(zhí)行失敗,或操作符 (||)才會(huì)執(zhí)行第二個(gè)命令
短路現(xiàn)象

可以分析一下下面的命令的輸出:
echo "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8" || echo "9" 

下面是輸出:
1
2
4
7
8

分析:
echo "1"  執(zhí)行成功卸亮,所以執(zhí)行echo "2"
echo "2" 執(zhí)行成功忽妒,不執(zhí)行 echo "3"
既然沒有執(zhí)行echo "3",可以看做不存在 “ " || echo "3" ”,echo "2"后緊接“ && echo "4" ”
echo "4" 執(zhí)行成功段直,不執(zhí)行echo "5"
既然沒有執(zhí)行echo "5"吃溅,可以看做不存在 “ " || echo "5" ”,echo "4"后緊接“ || echo "6" ”
echo "4" 執(zhí)行成功鸯檬,不執(zhí)行echo "6"
既然沒有執(zhí)行echo "6"罕偎,可以看做不存在 “ " || echo "6" ”,echo "4"后緊接“ && echo "7" ”
echo "7" 執(zhí)行成功京闰,執(zhí)行echo "8"
echo "8" 執(zhí)行成功颜及,不執(zhí)行echo "9"
所以最終變成了:

echo "1" && echo "2" && echo "4" && echo "7" && echo "8"
shell中&&和||的使用方法&&運(yùn)算符:
command1  && command2
&&左邊的命令(命令1)返回真(即返回0,成功被執(zhí)行)后蹂楣,&&右邊的命令(命令2)才能夠被執(zhí)行俏站;換句話說,“如果這個(gè)命令執(zhí)行成功&&那么執(zhí)行這個(gè)命令”痊土。 
語法格式如下:
command1 && command2 [&& command3 ...]
1 命令之間使用 && 連接肄扎,實(shí)現(xiàn)邏輯與的功能。
2 只有在 && 左邊的命令返回真(命令返回值 $? == 0)赁酝,&& 右邊的命令才會(huì)被執(zhí)行犯祠。
3 只要有一個(gè)命令返回假(命令返回值 $? == 1),后面的命令就不會(huì)被執(zhí)行酌呆。

示例 1
malihou@ubuntu:~$ cp ~/Desktop/1.txt ~/1.txt && rm ~/Desktop/1.txt && echo "success"
示例 1 中的命令首先從 ~/Desktop 目錄復(fù)制 1.txt 文件到 ~ 目錄衡载;執(zhí)行成功后,使用 rm 刪除源文件隙袁;如果刪除成功則輸出提示信息痰娱。

||運(yùn)算符:
command1 || command2
||則與&&相反。如果||左邊的命令(命令1)未執(zhí)行成功菩收,那么就執(zhí)行||右邊的命令(命令2)梨睁;或者換句話說,“如果這個(gè)命令執(zhí)行失敗了||那么就執(zhí)行這個(gè)命令娜饵。
1 命令之間使用 || 連接坡贺,實(shí)現(xiàn)邏輯或的功能。
2 只有在 || 左邊的命令返回假(命令返回值 $? == 1)箱舞,|| 右邊的命令才會(huì)被執(zhí)行遍坟。這和 c 語言中的邏輯或語法功能相同,即實(shí)現(xiàn)短路邏輯或操作褐缠。
3 只要有一個(gè)命令返回真(命令返回值 $? == 0)政鼠,后面的命令就不會(huì)被執(zhí)行。

示例 2
malihou@ubuntu:~$ rm ~/Desktop/1.txt || echo "fail"
在示例 2 中队魏,如果 ~/Desktop 目錄下不存在文件 1.txt公般,將輸出提示信息万搔。 

示例 3
malihou@ubuntu:~$ rm ~/Desktop/1.txt && echo "success" || echo "fail"
在示例 3 中,如果 ~/Desktop 目錄下存在文件 1.txt官帘,將輸出 success 提示信息瞬雹;否則輸出 fail 提示信息。
如果希望把幾個(gè)命令合在一起執(zhí)行刽虹, s h e l l提供了兩種方法酗捌。既可以在當(dāng)前s h e l l也可以在子s h e l l中執(zhí)行一組命令。

()運(yùn)算符:
為了在當(dāng)前shell中執(zhí)行一組命令涌哲,可以用命令分隔符(即",")隔開每一個(gè)命令胖缤,并把所有的命令用圓括號()括起來。 
它的一般形式為:  ( 命令阀圾;命令哪廓;命令… )
1 一條命令需要獨(dú)占一個(gè)物理行,如果需要將多條命令放在同一行初烘,命令之間使用命令分隔符(;)分隔涡真。執(zhí)行的效果等同于多個(gè)獨(dú)立的命令單獨(dú)執(zhí)行的效果。
2 () 表示在當(dāng)前 shell 中將多個(gè)命令作為一個(gè)整體執(zhí)行肾筐。需要注意的是哆料,使用 () 括起來的命令在執(zhí)行前面都不會(huì)切換當(dāng)前工作目錄,也就是說命令組合都是在當(dāng)前工作目錄下被執(zhí)行的吗铐,盡管命令中有切換目錄的命令东亦。
3 命令組合常和命令執(zhí)行控制結(jié)合起來使用。
 
示例 4
malihou@ubuntu:~$ rm ~/Desktop/1.txt || (cd ~/Desktop/;ls -a;echo "fail")
 
在示例 4 中抓歼,如果目錄 ~/Desktop 下不存在文件 1.txt讥此,則執(zhí)行命令組合。

三谣妻、管道

管道是什么?管道是一種通信機(jī)制卒稳,通常用于進(jìn)程間的通信(也可通過socket進(jìn)行網(wǎng)絡(luò)通信)蹋半,它表現(xiàn)出來的形式就是將前面每一個(gè)進(jìn)程的輸出(stdout)直接作為下一個(gè)進(jìn)程的輸入(stdin)

管道又分為匿名管道和具名管道充坑。我們在使用一些過濾程序時(shí)經(jīng)常會(huì)用到的就是匿名管道减江,在命令行中由|分隔符表示,|在前面的內(nèi)容中我們已經(jīng)多次使用到了捻爷。具名管道簡單的說就是有名字的管道辈灼,通常只會(huì)在源程序中用到具名管道。下面我們就將通過一些常用的可以使用管道的"過濾程序"來幫助你熟練管道的使用也榄。

3.1 試用管道

查看/etc目錄下有哪些文件和目錄巡莹,使用ls命令來查看:

$ ls -al /etc

有太多內(nèi)容司志,屏幕不能完全顯示,這時(shí)候可以使用滾動(dòng)條或快捷鍵滾動(dòng)窗口來查看降宅。不過這時(shí)候可以使用管道:

$ ls -al /etc | less 
# less命令是對文件或其它輸出進(jìn)行分頁顯示的工具

通過管道將前一個(gè)命令(ls)的輸出作為下一個(gè)命令(less)的輸入骂远,然后就可以一行一行地看。

3.2 cut 選取命令腰根,就是將一段數(shù)據(jù)經(jīng)過分析激才,取出我們想要的。一般來說额嘿,選取信息通常是針對“行”來進(jìn)行分析的瘸恼,并不是整篇信息分析的。

cut是以每一行為一個(gè)處理對象的册养,這種機(jī)制和sed是一樣的东帅。
cut一般以什么為依據(jù)呢? 也就是說,我怎么告訴cut我想定位到的剪切內(nèi)容呢?
cut命令主要是接受三個(gè)定位方法:
第一捕儒,字節(jié)(bytes)冰啃,用選項(xiàng)-b
第二,字符(characters)刘莹,用選項(xiàng)-c
第三阎毅,域(fields),用選項(xiàng)-f
打印/etc/passwd文件中以:為分隔符的第1個(gè)字段和第6個(gè)字段分別表示用戶名和其家目錄:

$ cut /etc/passwd -d ':' -f 1,6
正常情況下讀取樣式

打印/etc/passwd文件中每一行的前N個(gè)字符:

# 前五個(gè)(包含第五個(gè))
$ cut /etc/passwd -c -5
# 前五個(gè)之后的(包含第五個(gè))
$ cut /etc/passwd -c 5-
# 第五個(gè)
$ cut /etc/passwd -c 5
# 2到5之間的(包含第五個(gè))
$ cut /etc/passwd -c 2-5

3.3 grep 是一種強(qiáng)大的文本搜索工具点弯,它能使用正則表達(dá)式搜索文本扇调,并把匹配的行打印出來。

grep命令是很強(qiáng)大的抢肛,也是相當(dāng)常用的一個(gè)命令狼钮,它結(jié)合正則表達(dá)式可以實(shí)現(xiàn)很復(fù)雜卻很高效的匹配和查找,不過在學(xué)習(xí)正則表達(dá)式之前捡絮,這里介紹它簡單的使用熬芜,而關(guān)于正則表達(dá)式后面將會(huì)有單獨(dú)一小節(jié)介紹到時(shí)會(huì)再繼續(xù)學(xué)習(xí)grep命令和其他一些命令。

grep命令的一般形式為:grep [命令選項(xiàng)]... 用于匹配的表達(dá)式 [文件]...

-a 不要忽略二進(jìn)制數(shù)據(jù)福稳。 
                                 -A<顯示列數(shù)> 除了顯示符合范本樣式的那一行之外涎拉,并顯示該行之后的內(nèi)容。 
-b 在顯示符合范本樣式的那一行之外的圆,并顯示該行之前的內(nèi)容鼓拧。 
-c 計(jì)算符合范本樣式的列數(shù)。 
-C<顯示列數(shù)>或-<顯示列數(shù)> 除了顯示符合范本樣式的那一列之外越妈,并顯示該列之前后的內(nèi)容季俩。 
-d<進(jìn)行動(dòng)作> 當(dāng)指定要查找的是目錄而非文件時(shí),必須使用這項(xiàng)參數(shù)梅掠,否則grep命令將回報(bào)信息并停止動(dòng)作酌住。 -e<范本樣式> 指定字符串作為查找文件內(nèi)容的范本樣式店归。 
-E 將范本樣式為延伸的普通表示法來使用,意味著使用能使用擴(kuò)展正則表達(dá)式赂韵。 
-f<范本文件> 指定范本文件娱节,其內(nèi)容有一個(gè)或多個(gè)范本樣式,讓grep查找符合范本條件的文件內(nèi)容祭示,格式為每一列的范本樣式肄满。 
-F 將范本樣式視為固定字符串的列表。 
-G 將范本樣式視為普通的表示法來使用质涛。 
-h 在顯示符合范本樣式的那一列之前稠歉,不標(biāo)示該列所屬的文件名稱。 
-H 在顯示符合范本樣式的那一列之前汇陆,標(biāo)示該列的文件名稱怒炸。 
-i 胡列字符大小寫的差別。 -l 列出文件內(nèi)容符合指定的范本樣式的文件名稱毡代。 
-L 列出文件內(nèi)容不符合指定的范本樣式的文件名稱阅羹。
                                     -n 在顯示符合范本樣式的那一列之前,標(biāo)示出該列的編號教寂。 
                                     -q 不顯示任何信息捏鱼。 
-R/-r 此參數(shù)的效果和指定“-d recurse”參數(shù)相同。  (我個(gè)人認(rèn)為這個(gè)就屬于遞歸搜索子目錄中的文件)
                        grep遞歸搜索文件 在多級目錄中對文本進(jìn)行遞歸搜索: 
                        grep "text" . -r -n 
                        # .表示當(dāng)前目錄酪耕。
-s 不顯示錯(cuò)誤信息导梆。 
-v 反轉(zhuǎn)查找。 
-w 只顯示全字符合的列迂烁。 
-x 只顯示全列符合的列看尼。 
-y 此參數(shù)效果跟“-i”相同。 
                                   -o 只輸出文件中匹配到的部分盟步。
$ export | grep "declare"

3.4 wc 命令藏斩,簡單小巧的計(jì)數(shù)工具

wc 命令用于統(tǒng)計(jì)并輸出一個(gè)文件中行、單詞和字節(jié)的數(shù)目却盘,比如輸出/etc/passwd文件的統(tǒng)計(jì)信息:

$ wc /etc/passwd

分別只輸出行數(shù)灾茁、單詞數(shù)、字節(jié)數(shù)谷炸、字符數(shù)和輸入文本中最長一行的字節(jié)數(shù):

# 行數(shù)       $ wc -l /etc/passwd
# 單詞數(shù)     $ wc -w /etc/passwd
# 字節(jié)數(shù)     $ wc -c /etc/passwd
# 字符數(shù)     $ wc -m /etc/passwd
# 最長行字節(jié)數(shù) $ wc -L /etc/passwd

注意:對于西文字符來說,一個(gè)字符就是一個(gè)字節(jié)禀挫,但對于中文字符一個(gè)漢字是大于2個(gè)字節(jié)的旬陡,具體數(shù)目是由字符編碼決定的

再來結(jié)合管道來操作一下,下面統(tǒng)計(jì) /etc 下面所有目錄數(shù):

$ ls -dl /etc/*/ | wc -l
ls命令目錄基本操作 
ls命令用來顯示目標(biāo)列表语婴,在Linux中是使用率較高的命令描孟。
ls命令的輸出信息可以進(jìn)行彩色加亮顯示驶睦,以分區(qū)不同類型的文件。
 語法 ls(選項(xiàng))(參數(shù)) 選項(xiàng) 
-a:顯示所有檔案及目錄(ls內(nèi)定將檔案名或目錄名稱為“.”的視為隱藏匿醒,不會(huì)列出)场航; 
                                -A:顯示除影藏文件“.”和“..”以外的所有文件列表; 
-C:多列顯示輸出結(jié)果廉羔。這是默認(rèn)選項(xiàng)溉痢;
-l:與“-C”選項(xiàng)功能相反,所有輸出信息用單列格式輸出憋他,不輸出為多列孩饼; 
-c:與“-lt”選項(xiàng)連用時(shí),按照文件狀態(tài)時(shí)間排序輸出目錄內(nèi)容竹挡,排序的依據(jù)是文件的索引節(jié)點(diǎn)中的ctime字段镀娶。與“-l”選項(xiàng)連用時(shí),則排序的一句是文件的狀態(tài)改變時(shí)間揪罕; 
                                  -d:僅顯示目錄名梯码,而不顯示目錄下的內(nèi)容列表。顯示符號鏈接文件本身好啰,而不顯示其所指向的目錄列表轩娶; 
-f:此參數(shù)的效果和同時(shí)指定“aU”參數(shù)相同,并關(guān)閉“l(fā)st”參數(shù)的效果坎怪; 
-i:顯示文件索引節(jié)點(diǎn)號(inode)罢坝。一個(gè)索引節(jié)點(diǎn)代表一個(gè)文件;
-k:以KB(千字節(jié))為單位顯示文件大薪亮嘁酿; 
                                  -l:以長格式顯示目錄下的內(nèi)容列表。輸出的信息從左到右依次包括文件名男应,文件類型闹司、權(quán)限模式、硬連接數(shù)沐飘、所有者游桩、組、文件大小和文件的最后修改時(shí)間等耐朴; 
-m:用“,”號區(qū)隔每個(gè)文件和目錄的名稱借卧; 
-n:以用戶識(shí)別碼和群組識(shí)別碼替代其名稱;
 -r:以文件名反序排列并輸出目錄內(nèi)容列表筛峭; 
-s:顯示文件和目錄的大小铐刘,以區(qū)塊為單位; 
-t:用文件和目錄的更改時(shí)間排序影晓;
-R:遞歸處理镰吵,將指定目錄下的所有文件及子目錄一并處理檩禾;

3.5 sort 排序命令

這個(gè)命令前面我們也是用過多次,功能很簡單就是將輸入按照一定方式排序疤祭,然后再輸出,它支持的排序有按字典排序,數(shù)字排序盼产,按月份排序,隨機(jī)排序勺馆,反轉(zhuǎn)排序戏售,指定特定字段進(jìn)行排序等等。

sort命令文件過濾分割與合并 
sort命令是在Linux里非常有用谓传,它將文件進(jìn)行排序蜈项,并將排序結(jié)果標(biāo)準(zhǔn)輸出。
sort命令既可以從特定的文件续挟,也可以從stdin中獲取輸入紧卒。
語法 sort(選項(xiàng))(參數(shù)) 選項(xiàng)
-b:忽略每行前面開始出的空格字符;
-c:檢查文件是否已經(jīng)按照順序排序诗祸; 
-d:排序時(shí)跑芳,處理英文字母、數(shù)字及空格字符外直颅,忽略其他的字符博个; 
-f:排序時(shí),將小寫字母視為大寫字母功偿;
-i:排序時(shí)盆佣,除了040至176之間的ASCII字符外,忽略其他的字符械荷;
-m:將幾個(gè)排序號的文件進(jìn)行合并共耍;
-M:將前面3個(gè)字母依照月份的縮寫進(jìn)行排序; 
                                                                      -n:依照數(shù)值的大小排序吨瞎;
-o<輸出文件>:將排序后的結(jié)果存入制定的文件痹兜; 
                                                                       -r:以相反的順序來排序;
-t<分隔字符>:指定排序時(shí)所用的欄位分隔字符颤诀;
+<起始欄位>-<結(jié)束欄位>:以指定的欄位來排序字旭,范圍由起始欄位到結(jié)束欄位的前一欄位。 
參數(shù) 文件:指定待排序的文件列表崖叫。 
                                           # -n是按照數(shù)字大小排序遗淳,-r是以相反順序,-k是指定需要排序的欄位心傀,-t指定欄位分隔符為冒號
默認(rèn)為字典排序:
$ cat /etc/passswd | sort
反轉(zhuǎn)排序:
$ cat /etc/passwd | sort -r
按特定字段排序:
$ cat /etc/passwd | sort -t':' -k 3

上面的-t參數(shù)用于指定字段的分隔符洲脂,這里是以":"作為分隔符;-k 字段號用于指定對哪一個(gè)字段進(jìn)行排序。這里/etc/passwd文件的第三個(gè)字段為數(shù)字恐锦,默認(rèn)情況下是以字典序排序的,如果要按照數(shù)字排序就要加上-n參數(shù):

$ cat /etc/passwd | sort -t':' -k 3 -n

3.6 uniq 去重命令

uniq命令可以用于過濾或者輸出重復(fù)行疆液。

uniq命令用于報(bào)告或忽略文件中的重復(fù)行一铅,一般與sort命令結(jié)合使用。
 語法 uniq(選項(xiàng))(參數(shù)) 選項(xiàng) 
                        -c或——count:在每列旁邊顯示該行重復(fù)出現(xiàn)的次數(shù)堕油; 
                        -d或--repeated:僅顯示重復(fù)出現(xiàn)的行列潘飘; 
-f<欄位>或--skip-fields=<欄位>:忽略比較指定的欄位; 
-s<字符位置>或--skip-chars=<字符位置>:忽略比較指定的字符掉缺; 
-u或——unique:僅顯示出一次的行列卜录; 
-w<字符位置>或--check-chars=<字符位置>:指定要比較的字符。 
過濾重復(fù)行

我們可以使用history命令查看最近執(zhí)行過的命令(實(shí)際為讀取${SHELL}_history文件,如我們環(huán)境中的~/.zsh_history文件)眶明,不過你可能只想查看使用了那個(gè)命令而不需要知道具體干了什么艰毒,那么你可能就會(huì)要想去掉命令后面的參數(shù)然后去掉重復(fù)的命令:

$ history | cut -c 8- | cut -d ' ' -f 1 | uniq

然后經(jīng)過層層過濾,你會(huì)發(fā)現(xiàn)確是只輸出了執(zhí)行的命令那一列搜囱,不過去重效果好像不明顯丑瞧,仔細(xì)看你會(huì)發(fā)現(xiàn)它確實(shí)去重了,只是不那么明顯蜀肘,之所以不明顯是因?yàn)閡niq命令只能去連續(xù)重復(fù)的行绊汹,不是全文去重,所以要達(dá)到預(yù)期效果扮宠,我們先排序:

$ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq
# 或者
$ history | cut -c 8- | cut -d ' ' -f 1 | sort -u

這就是 Linux/UNIX 哲學(xué)吸引人的地方西乖,大繁至簡,一個(gè)命令只干一件事卻能干到最好坛增。
輸出重復(fù)行

輸出重復(fù)過的行(重復(fù)的只輸出一個(gè))及重復(fù)次數(shù)
$ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc
# 輸出所有重復(fù)的行
$ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -D

3.7 head顯示文件的開頭的內(nèi)容获雕。在默認(rèn)情況下,head命令顯示文件的頭10行內(nèi)容轿偎。

用法:head [選項(xiàng)]... [文件]...  
將每個(gè)指定文件的頭10 行顯示到標(biāo)準(zhǔn)輸出典鸡。  
如果指定了多于一個(gè)文件,在每一段輸出前會(huì)給出文件名作為文件頭坏晦。  
如果不指定文件萝玷,或者文件為"-",則從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)昆婿。  
  
長選項(xiàng)必須使用的參數(shù)對于短選項(xiàng)時(shí)也是必需使用的球碉。  
  -c,  --bytes=[-]K     顯示每個(gè)文件的前K 字節(jié)內(nèi)容;  
                        如果附加"-"參數(shù)仓蛆,則除了每個(gè)文件的最后K字節(jié)數(shù)據(jù)外  
                        顯示剩余全部內(nèi)容  
  -n, --lines=[-]K      顯示每個(gè)文件的前K 行內(nèi)容睁冬;  
                        如果附加"-"參數(shù),則除了每個(gè)文件的最后K 行外顯示  
                        剩余全部內(nèi)容  
  -q, --quiet, --silent 不顯示包含給定文件名的文件頭  
  -v, --verbose         總是顯示包含給定文件名的文件頭  
      --help            顯示此幫助信息并退出  
      --version         顯示版本信息并退出  
  
K 后面可以跟乘號:  
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,  
GB 1000*1000*1000, G 1024*1024*1024, 對于T, P, E, Z, Y 同樣適用。 

文本處理命令還有很多豆拨,下一節(jié)將繼續(xù)介紹一些常用的文本處理的命令直奋。

四、作業(yè)

熟悉 cut施禾,sort脚线,uniq命令以及參數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市弥搞,隨后出現(xiàn)的幾起案子邮绿,更是在濱河造成了極大的恐慌,老刑警劉巖攀例,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件船逮,死亡現(xiàn)場離奇詭異,居然都是意外死亡粤铭,警方通過查閱死者的電腦和手機(jī)挖胃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來承耿,“玉大人冠骄,你說我怎么就攤上這事〖哟” “怎么了凛辣?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長职烧。 經(jīng)常有香客問我扁誓,道長,這世上最難降的妖魔是什么蚀之? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任蝗敢,我火速辦了婚禮,結(jié)果婚禮上足删,老公的妹妹穿的比我還像新娘寿谴。我一直安慰自己,他們只是感情好失受,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布讶泰。 她就那樣靜靜地躺著,像睡著了一般拂到。 火紅的嫁衣襯著肌膚如雪痪署。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天兄旬,我揣著相機(jī)與錄音狼犯,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛悯森,可吹牛的內(nèi)容都是我干的宋舷。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼呐馆,長吁一口氣:“原來是場噩夢啊……” “哼肥缔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汹来,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎改艇,沒想到半個(gè)月后收班,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谒兄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年摔桦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片承疲。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邻耕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出燕鸽,到底是詐尸還是另有隱情兄世,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布啊研,位于F島的核電站御滩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏党远。R本人自食惡果不足惜削解,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沟娱。 院中可真熱鬧氛驮,春花似錦、人聲如沸济似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碱屁。三九已至磷脯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娩脾,已是汗流浹背赵誓。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俩功。 一個(gè)月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓幻枉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诡蜓。 傳聞我的和親對象是個(gè)殘疾皇子熬甫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容