一篓跛、實(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é)果:
學(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ù)