本文章的内容隻對文本進行編輯,但結果并不會把原檔案内容更改
sort指令,隻是對檔案排行排序
選項意義
-c 測試檔案是否已經被排序
-k 指定排序的區域(常用)
-m 合并兩個已排序的檔案
-n 根據數字大小進行排序(常用)
-o 将輸出寫到指定檔案,相當于重定向輸出檔案
-r 将排序結果逆向顯示
-t 改變區域分隔符(常用)
-u 去除結果中的重複行
格式:sort 選項輸入檔案
下面詳細解說:
-t選項——原理從第一區域開始排序,若第一區域内容相同,則以第二區域排序
-k
可以留意到,從第三區域才開始排序,前2個區域是沒有排序,而-t就以:為分隔符
也可以用sort -t: -k3 /etc/passwd
這樣第3區域剛好是UID就會排序,但會發現這裡隻以第一個字元大小進行排序,而不會以整體大小排序
如:這樣隻達到第1個字元進行排序,而不是對整個數進行排序
1 1
400 400
67 501
89 602
501 67
602 89
-n選項,為指定列的數字大小,屬于整體性質來排序
如:
900 3
60 60
3 100
100 900
可以看出,加了-n是對整體排序,而不加-n則隻以單個字元排序
是以用 sort -t: -k3n /etc/passwd 這樣就可以對UID進行從小到大排序了
-r是反向,從大到小排序
-u選項,去除重複出現的區域
其中重複了2行的900:aa就不會顯示出來
-o為定向輸出,但直接用>來代替就行了,這個選項很少用
-m為排序後2個檔案合并,前提2個檔案内容沒有重複
這樣就把abc的内容全部到aaa裡了
其實還可以簡寫為sort -t: abc aaa 就行了
也可以按2個檔案的區域進行排序
這樣就達到2個檔案内容合并後再進行區域排序
sort指令就介紹到這裡
uniq指令——用于去除重複行,其實跟sort -u差不多
-c 列印每行在文本中重複出現的次數
-d 隻顯示有重複的記錄,每個重複記錄隻出現一次
-u 隻顯示沒有重複的記錄
去除2行重内容
與sort -u的差別,sort -u隻會把重複行删除剩下1個
可以留意到,uniq隻是把連續重複的行删除,第4行的555:rr是沒有删除,但sort -u則認為都是重複,是以一并删除
-C為列印文本中出現重複的次數
可以顯示出重複的次數
-d隻列印連續重複的記錄
隻顯示出連續重複的行記錄
-u隻列印沒有連續重複的記錄
其實-d和-u是正反向的對比效果
cut指令——用于從标準輸入或文本檔案中按區域或行提取文本
格式:cut 選項檔案
-c 指定提取的字元數或字元範圍
-f 指定提取的區域數或範圍
-d 改變區域分隔符
-c1隻提取abc檔案中第一個字元的列,而-c1-5即代表1-5個字元的列,-c2,4即代表第2和第4個字元的列
-d指定分隔符,-f為指定區域,這2個參數通常要一起使用
感覺跟awk的截取差不多
空格也可以用cut -d “ ” 來表示
使用cut來截取IP也行
這方法的原理跟awk一樣,就是先過濾IP字段,再以:為分區過濾,再過濾出第1區域
也可以結合sort來使用對UID進行排序
這樣就把UID部分單獨截取出來進行排序,當然用awk也能實作的
paste指令——把兩個檔案内容粘貼一起
-d 指定分隔符,預設是以tab鍵為分隔符
-s 将每個檔案粘貼成一行
可以留意到粘貼後,是以空格為分隔符
當然也可以排粘貼後的結果輸出到另一個檔案也行
-d為指定分隔,因為預設是以tab鍵為分隔符,現在改變了分隔符?,注意,分隔符隻能指定1個字元,不能指定多個字元,如-d***,這樣的效果隻能是-d*
-s可以排兩個檔案以的内容分别以一行方式排列再合并,但效果不好看
tr指令——實作字元轉換功能,其功能類似于sed指令,但tr指令比較簡單
格式:tr 選項字元串1 字元串2 <标準輸入檔案,也可以使用管道
-c 標明字元串1中字元集的補集,即反選字元串1中的字元集
-d 删除字元串1中出現的所有字元(常用)
-s 删除所有重複出現的字元序列,隻保留一個
tr指令要麼在管道後面使用,要麼在标準輸入”<”使用
從abc中标準輸入,然後比對到555字元串就删除,-d是删除字元串
[root@localhost~]# cat abc
555:rRAd
60:bB
heLLo:333
[root@localhost~]# tr -d A-Z < abc
555:rd
60:b
heo:333
從abc文本中删除大寫A-Z範圍的字元串
同理,也可以删除數字0-9的範圍
這樣0-9範圍的數字就被删除
-s為删除重複的字元,隻保留1個
指定的條件是a,b這兩個重複的字元,然後删除重複隻保留1個
删除文本中有多個空白行
把空白行都删除,這裡\n是代表換行的意思
也可以指定範圍進行删除
可以看到,隻删除剩1個的重複字元
若上面的指令改成 tr “[a-z][0-9]” < abc
這也可以比對凡是大寫的字元都更改為9,注意更改的字元隻能是單個,不能是多個,如:
tr“[A-Z]” “999” < abc 這樣的效果也隻能替換1個9的字元而不能是多個
使用管道方式用tr指令
這樣比對19的字元都全部删除
檔案的排序、合并就介紹到這裡