1. 程式人生 > >文本處理命令- cat more less cut wc sort uniq

文本處理命令- cat more less cut wc sort uniq

app 存在 麻煩 several div 註意 class htm .cn

文本處理命令 cat more less cut wc sort uniq

1.cat


cat主要功能:
1.一次顯示整個文件。 cat filename
2.從鍵盤創建一個文件。 cat > filename (只能創建新文件,不能編輯已有文件).
1 [loong@localhost ~]$ cat > test.txt
 2 this is a test for cat command.^[[D        
 3 a 
 4 b
 5 cc
 6 de
其中^[[D是向左的箭頭,本想回退一格編輯,但很可惜只能順序輸入
另外,如何結束輸入呢???

在linux下:
ctrl+d:代表輸入完成或者註銷
ctrl+c:中斷當前程序
ctrl+z:將作業放置到後臺(暫停)
所以,此處應使用CTRL+D,結束輸入。

3.將幾個文件合並為一個文件: cat file1 file2 > file
4.追加一個文件到另一個文件末尾 cat file1 >> file2
參數:
-n 或 --number 由 1 開始對所有輸出的行數編號
-b 或 --number-nonblank 和 -n 相似,只不過對於空白行不編號
-s 或 --squeeze-blank 當遇到有連續兩行以上的空白行,就代換為一行的空白行
-v 或 --show-nonprinting 顯示非打印字符,使用^和M-表示,除了LFD和TAB



2.more


more命令,功能類似 cat ,cat命令是整個文件的內容從上到下顯示在屏幕上。
more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按

空格鍵 顯示下一屏。

Enter鍵 顯示下一行。

nf 向下移動n屏,其中n是數字。

nb 向上移動n屏,其中n是數字。

/模式 向下查找指定的字符串模式。 n 重復前面查找命令。

= 顯示當前的行號。

h 顯示more所有命令的幫助信息。

q 退出more。
:f 輸出文件名和當前行的行號
V 調用vi編輯器
!命令 調用Shell,並執行命令
q 退出more

more命令從前向後讀取文件,因此在啟動時就加載整個文件。

命令參數:

+n 從笫n行開始顯示 more +3 log2012.log

-n 定義屏幕大小為n行 more -5 log2012.log

+/pattern 在每個檔案顯示前搜尋該字串(pattern),從該字串前兩行開始顯示 more +/pattern log2012.log

-s 把連續的多個空行顯示為一行 more -s log2012.log

-u 把文件內容中的下畫線去掉 more -u log2012.log




3.less


命令格式:

less [參數] 文件

功能:

less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向後移動,而且 less 在查看之前不會加載整個文件。

回車鍵 向下一行
空格鍵 向下一頁
y 向上一行
b 向上一頁

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重復前一個搜索(與 / 或 ? 有關)
N:反向重復前一個搜索(與 / 或 ? 有關)

v - 使用配置的編輯器編輯當前文件

h - 顯示 less 的幫助文檔

&pattern - 僅顯示匹配模式的行,而不是整個文件


命令參數:

-N 顯示每行的行號

-o <文件名> 將less 輸出的內容在指定文件中保存起來

-Q 不使用警告音

-s 顯示連續空行為一行


4.cut


cut是一個選取命令,通常是針對“行”來進行分析的,並不是整篇信息分析的。

cut是從一行中 取出我們想要的;

(1)其語法格式為:
cut [-bn] [file] cut -b 3 ins.log ; cut -b 3-5,7 ins.log
-b :以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標誌。
cut [-c] [file] cut -c 3 ins.log cut -c -3 ins,log cut -c 3-5,7 ins.log
cut -c -3 從開始到第三個字符 cut -c 3- 從第三個字符到最後
-c :以字符為單位進行分割。
cut [-df] [file] cut -d : -f 1 cut -d : -f 1,3-5
-d :自定義分隔符,默認為制表符。 -f :與-d一起使用,指定顯示哪個區域。

使用說明
cut 命令從文件的每一行剪切字節、字符和字段並將這些字節、字符和字段寫至標準輸出。
如果不指定 File 參數,cut 命令將讀取標準輸入。必須指定 -b、-c 或 -f 標誌之一。

主要參數
-b :以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標誌。
-c :以字符為單位進行分割。
-d :自定義分隔符,默認為制表符。
-f :與-d一起使用,指定顯示哪個區域。
-n :取消分割多字節字符。僅和 -b 標誌一起使用。如果字符的最後一個字節落在由 -b 標誌的 List 參數指示的<br />範圍之內,該字符將被寫出;否則,該字符將被排除。


實例:

1.以字節提取:

$ who
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)
如果我們想提取每一行的第3個字節,就這樣:

$ who|cut -b 3
c
c
c

提取 3到5和 8 字節
$ who|cut -b 3-5,8
croe
croe
croe

2.以字符提取:
$ cat cut_ch.txt
星期一
星期二
星期三
星期四
$ cut -b 3 cut_ch.txt (用字節提取出錯了)
?
?
?
?
$ cut -c 3 cut_ch.txt (要用字符提取)




看到了吧,用-c則會以字符為單位,輸出正常;而-b只會傻傻的以字節(8位二進制位)來計算,輸出就是亂碼。

當遇到多字節字符時,可以使用-n選項,-n用於告訴cut不要將多字節字符拆開。

例子如下:
$ cat cut_ch.txt |cut -b 2
?
?
?
?
$ cat cut_ch.txt |cut -nb 2




3.自定義分隔:

如果遇到空格和制表符時,怎麽分辨呢?怎麽辦?

有時候制表符確實很難辨認,有一個方法可以看出一段空格到底是由若幹個空格組成的還是由一個制表符組成的。

$ cat tab_space.txt
this is tab finish.
this is several space finish.

$ sed -n l tab_space.txt
this is tab\tfinish.$
this is several space finish.$

看到了吧,如果是制表符(TAB),那麽會顯示為\t符號,如果是空格,就會原樣顯示
通過此方法即可以判斷制表符和空格了。
註意,上面sed -n後面的字符是L的小寫字母哦,不要看錯。

(9)我應該在cut -d中用什麽符號來設定制表符或空格呢?

其實cut的-d選項的默認間隔符就是制表符,所以當你就是要使用制表符的時候,完全就可以省略-d選項,而直接用-f來取域就可以了。

如果你設定一個空格為間隔符,那麽就這樣:

$ cat tab_space.txt | cut -d ‘ ‘ -f 1
this
this
註意,兩個單引號之間可確實要有一個空格哦,不能偷懶。
而且,你只能在-d後面設置一個空格,可不許設置多個空格,因為cut只允許間隔符是一個字符。

註意:

如果文件裏面的某些域是由若幹個空格來間隔的,那麽用cut就有點麻煩了,因為cut只擅長處理“以一個字符間隔”的文本內容

5.wc


Linux系統中的wc(Word Count)命令的功能為統計
指定文件中的字節數、字數、行數,並將統計結果顯示輸出。

命令格式:

wc [選項]文件...

2.命令功能:

統計指定文件中的字節數、字數、行數,並將統計結果顯示輸出。該命令統計指定文件中的字節數、字數、行數。如果沒有給出文件名,則從標準輸入讀取。wc同時也給出所指定文件的總統計數。

3.命令參數:

# wc install.log

901 1815 40279 install.log
行數 單詞數 字節數 文件名

-c 統計字節數。 wc -c ins.log

-l 統計行數。 wc -l ins.log

-m 統計字符數。這個標誌不能與 -c 標誌一起使用。 wc -m ins.log

-w 統計字數。一個字被定義為由空白、跳格或換行字符分隔的字符串。

-L 打印最長行的長度。

-help 顯示幫助信息

--version 顯示版本信息

實例2:用wc命令怎麽做到只打印統計數字不打印文件名

# cat test.txt |wc -l

實例3:用來統計當前目錄下的文件數

# ls -l | wc -l

6.sort

據不同的數據類型進行排序,其語法及常用參數格式:
  sort [-bcfMnrtk] [源文件] [-o 輸出文件]

補充說明:sort可針對文本文件的內容,以行為單位來排序。

參  數:
-u 在輸出行中去除重復行 sort -u seq.txt
-b 忽略每行前面開始出的空格字符。
-c 檢查文件是否已經按照順序排序。
-f 排序時,忽略大小寫字母。
-M 將前面3個字母依照月份的縮寫進行排序。
-n 依照數值的大小排序。 ( 默認以文字類型排序) sort -n number.txt

-o<輸出文件> 將排序後的結果存入指定的文件。sort -r number.txt -o number.txt
-r 以相反的順序來排序。 sort -r number.txt
-t<分隔字符> 指定排序時所用的欄位分隔字符。 sort -t ‘:’ -k 2 facebook.txt
-k 選擇以哪個區間進行排序。

實例:
1.簡單排序 並輸出

$ cat seq.txt
banana
apple
pear
orange
$ sort seq.txt
apple
banana
orange
pear

用戶可以保存排序後的文件內容,或把排序後的文件內容輸出至打印機。下例中用戶把排序後的文件內容保存到名為result的文件中。
$ Sort seq.txt > result


2.自定義排序
sort的-t選項和-k
如果有一個文件的內容是這樣:
$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

這個文件有三列,列與列之間用冒號隔開了,
第一列表示水果類型,第二列表示水果數量,第三列表示水果價格。
那麽我想以水果數量來排序,也就是以第二列來排序?
sort提供了 -t 選項,後面可以設定間隔符。指定了間隔符之後,就可以用 -k 來指定列數了。

$ sort -n -k 2 -t ‘:’ facebook.txt (以:為分隔符 根據第二個域排序)
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

7.uniq

uniq命令可以去除排序過的文件中的重復行,因此uniq經常和sort合用。也就是說,為了使uniq起作用,所有的重復行必須是相鄰的。

uniq語法

[root@www ~]# uniq [-icu]
選項與參數:
-i   :忽略大小寫字符的不同;
-c  :進行計數
-u  :只顯示出一次的行列-d   :僅顯示重復出現的行列


實例:

1.直接使用去重命令沒有任何效果

cat testfile
hello
world
friend
hello
world
hello
#uniq testfile  
hello
world
friend
hello
world
hello

2.先排序文件,然後去除重復

#cat words | sort |uniq
friend
hello
world

3.排序之後刪除了重復行,同時在行首位置輸出該行重復的次數

#sort testfile | uniq -c
1 friend
3 hello
2 world

4. -d僅顯示存在重復的行,-c並在行首顯示該行重復的次數

#sort testfile | uniq -dc
3 hello
2 world

5. -u僅顯示不重復的行

sort testfile | uniq -u
friend  

【引用“烏托邦眺望”:http://www.cnblogs.com/centos2017/p/7896746.html】

文本處理命令- cat more less cut wc sort uniq