Linux管道命令——《鸟哥的Linux私房菜》笔记
Linux管道命令——《鳥(niǎo)哥的Linux私房菜》筆記
0 前言
看完書(shū)之后,總感覺(jué)不記錄下來(lái)的話,很快就會(huì)忘了,然后又需要重新到處翻書(shū)找資料,所以還是把內(nèi)容記錄下來(lái),方便以后復(fù)習(xí)。本文大部分是書(shū)中的內(nèi)容,中間加入部分自己的理解以及嘗試的例子。
1 簡(jiǎn)單使用
管道命令使用“|”這個(gè)界定符號(hào),用于兩個(gè)命令中間,作用是把左邊命令的標(biāo)準(zhǔn)輸出作為右邊命令的標(biāo)準(zhǔn)輸入。
例如要查詢/etc目錄下的文件詳情,但是內(nèi)容太多會(huì)刷滿屏幕,查看起來(lái)不方便,就可以利用管道命令通過(guò)less命令來(lái)查看輸出。
ls -al /etc | less
需要注意的點(diǎn):
- 管道命令僅能處理標(biāo)準(zhǔn)輸出(standard output),會(huì)忽略出錯(cuò)時(shí)輸出的信息(standard error output);
- 管道命令命令必須要能夠接受來(lái)自前一個(gè)命令的數(shù)據(jù)成為標(biāo)準(zhǔn)輸出繼續(xù)處理才行。
2 選取命令
2.1 cut
2.1.1 命令介紹
- cut命令可以將一段信息的某一段“切”出來(lái),處理的信息是以“行”為單位。
- 命令說(shuō)明如下:
- cut -d ‘分隔字符’ -f fields # 該命令將每行按“分隔字符”分割,然后選取fields參數(shù)的那幾部分
- cut -c 字符范圍 # 該命令用于排列整齊的信息,可以取出每一行在選定字符范圍內(nèi)的串
- 參數(shù):
-d : 后面接分隔字符,與-f一起使用;
-f : 依據(jù)-d的 分隔字符,將一段信息切割成為數(shù)段,用-f取出第幾段(可以取多段)
-c : 以字符為單位取出固定字符區(qū)間的串
2.1.2 命令示例
1 獲取PATH變量的第五個(gè)路徑。
因?yàn)樵贚inux系統(tǒng)下,PATH變量的值是按‘:’分隔的,所以分隔字符是‘:’。
echo $PATH | cut -d ‘:’ -f 5
如果要獲取第1和第3個(gè)路徑,則:
echo $PATH | cut -d ‘:’ -f 1,3 # 經(jīng)試驗(yàn),命令中寫(xiě)1,3 與 3,1 的結(jié)果是一樣的,都會(huì)先輸出第一行
如果要獲取連續(xù)的一段區(qū)間,如第3~6,則:
echo $PATH | cut -d ‘:’ -f 3-6 #這是一個(gè)閉區(qū)間
如果要獲取從某一部分開(kāi)始,一直到末尾,如從第二個(gè)路徑開(kāi)始,則:
echo $PATH | cut -d ‘:’ -f 2-
2 將export輸出的信息取得第12個(gè)字符
export | cut -c 12
其他區(qū)間的選擇方式與上面相同。
-c 參數(shù)主要用于排列整齊的信息
2.1.3 注意事項(xiàng)
cut命令處理多空格相連的數(shù)據(jù)比較難
2.2 grep
2.2.1 命令介紹
- cut命令是在一行信息中取出某部分,而grep則是分析一行信息,若當(dāng)中有我們需要的信息,就把該行拿出來(lái)。
- 命令說(shuō)明如下:
- grep [-acinv] [–color=auto] ‘所要查找的字符串’ filename
- 參數(shù)
-a : 將binary文件以text文件的方式查找數(shù)據(jù);
-c : 計(jì)算找到‘所要查找的字符串’的次數(shù);
-i : 查找時(shí)忽略大小寫(xiě);
-n : 輸出行號(hào);
-v : 反向選擇,即顯示出沒(méi)有‘所要查找的字符串’內(nèi)容的那一行;
–color=auto : 將找到的關(guān)鍵詞部分加上顏色顯示。
2.2.2 命令示例
1 將/etc/passwd文件當(dāng)中有root出現(xiàn)的那一行提取出來(lái)
cat /etc/passwd | grep ‘root’
2 將/etc/passwd文件當(dāng)中不含有root的那一行取出
cat /etc/passwd | grep -v ‘root’
3 將/etc/passwd文件當(dāng)中有root出現(xiàn)的那一行提取出來(lái),且僅取第三列
cat /etc/passwd | grep ‘root’ | cut -d ‘:’ -f 3
3 排序命令
3.1 sort
3.1.1 命令介紹
- sort命令可以依據(jù)不同的數(shù)據(jù)類型來(lái)排序。
- 命令說(shuō)明如下:
- sort [-fbMnrtuk] [file or stdin]
- 參數(shù)
-f : 忽略大小寫(xiě)的差異;
-b : 忽略最前面的空格符部分;
-M : 以月份的名字來(lái)排序,例如JAN,DEC等的排序方法;
-n : 使用數(shù)字類型進(jìn)行排序(默認(rèn)是字符串類型);
-r : 反向排序;
-u : 相同的數(shù)據(jù)中,僅出現(xiàn)一行;
-t : 設(shè)置分隔符,默認(rèn)是用 [tab] 分隔;
-k : 指定以哪個(gè)區(qū)間進(jìn)行排序,默認(rèn)是第一個(gè)區(qū)間。
3.1.2 命令示例
1 將/etc/passwd文件中的信息按賬號(hào)進(jìn)行排序
cat /etc/passwd | sort
2 /etc/passwd文件中的信息是按 : 來(lái)分隔的,以第三列進(jìn)行排序
- cat /etc/passwd | sort -t ‘:’ -k 3 # 這是把第三列按字符串類型進(jìn)行排序
- cat /etc/passwd | sort -t ‘:’ -k 3 -n # 這是把第三列按數(shù)字類型進(jìn)行排序
- cat /etc/passwd | sort -t ‘:’ -k 3 -n -r # 這是把第三列按數(shù)字類型逆序排序
3 僅把/etc/passwd文件中的賬號(hào)取出,并按字典序逆序排序
- cat /etc/passwd | cut -d ‘:’ -f 1 | sort -r
- cut -d ‘:’ -f 1 /etc/passwd | sort -r
3.2 uniq
3.2.1 命令介紹
- 把輸入的重復(fù)數(shù)據(jù)僅顯示一次
- 命令說(shuō)明如下:
- uniq [-ic]
- 參數(shù)
-i : 忽略大小寫(xiě)字符的不同;
-c : 計(jì)數(shù),即顯示每個(gè)數(shù)據(jù)出現(xiàn)的次數(shù)
3.2.2 命令示例
1 將/ect/passwd 文件中第四列的數(shù)據(jù)按數(shù)字類型正序排好后,重復(fù)的數(shù)據(jù)僅顯示一次
- cut -d ‘:’ -f 4 /etc/passwd | sort -n | uniq
- cut -d ‘:’ -f 4 /etc/passwd | sort -nu
上面兩種方式的效果是相同的,那么為什么還要有uniq呢?這是因?yàn)閡niq能夠顯示數(shù)據(jù)重復(fù)的次數(shù)
2 在1的基礎(chǔ)上,顯示出數(shù)據(jù)重復(fù)的次數(shù)
- cut -d ‘:’ -f 4 /etc/passwd | sort -n | uniq -c
此時(shí),顯示的數(shù)據(jù)最左邊為重復(fù)次數(shù),后接一個(gè)空格,隨后是cut獲取到的排好序的數(shù)據(jù)
3 在2的基礎(chǔ)上,把顯示的數(shù)據(jù)按重復(fù)次數(shù)逆序排好
- cut -d ‘:’ -f 4 /etc/passwd | sort -n | uniq -c | sort -t ’ ’ -k 1 -n
因?yàn)閡niq -c命令后,重復(fù)次數(shù)在第一列,且與數(shù)據(jù)以空格隔開(kāi),所以用sort命令按空格分隔,按第一列以數(shù)字類型排序
3.3 wc
3.3.1 命令介紹
- wc命令可以列出數(shù)據(jù)總共有多少行,多少字(英文單字),多少字符
- 命令說(shuō)明如下:
- wc [-lwm]
- 參數(shù)
-l : 僅列出行;
-w : 僅列出多少字(英文單字);
-m : 多少字符。 - 如果不帶參數(shù)的話,則列出行數(shù)、字?jǐn)?shù)以及字符數(shù)
3.3.2 命令示例
統(tǒng)計(jì)/etc/passwd文件里面總的行數(shù)、字?jǐn)?shù)和字符數(shù)
cat /etc/passwd | wc
4 未完待續(xù)
5 后記
上述命令的參數(shù)僅為《鳥(niǎo)哥的Linux私房菜》中列出來(lái)的常用的參數(shù),實(shí)際上,上述命令并不止有那幾個(gè)參數(shù),具體的可以使用man指令查看。
總結(jié)
以上是生活随笔為你收集整理的Linux管道命令——《鸟哥的Linux私房菜》笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html5 矢量 插件,Sketchpa
- 下一篇: linux基础管道命令参数用法