Linux 文本處理命令詳解(tr cut sort uniq)

一、tr 命令

tr (translate) 命令可以對來自標(biāo)準(zhǔn)輸入的字符進(jìn)行替換、壓縮和刪除操作。

語法
tr [option] string1 string2
選項(xiàng)

tr string1 string2 :將標(biāo)準(zhǔn)輸入中所有屬于 string1 的字符替換為 string2 中的字符
-d :刪除標(biāo)準(zhǔn)輸入中所有屬于 string1 的字符
-s :把標(biāo)準(zhǔn)輸入中連續(xù)的重復(fù)字符壓縮成一個(gè)字符顯示
-c :取代或刪除標(biāo)準(zhǔn)輸入中所有不屬于 string1 的字符

示例
# 替換指定字符
$ echo "hello world" | tr 'h' 'H'
Hello world

# 刪除指定字符(數(shù)字和空格)
$ echo "hello 12345 world" | tr -d '0-9 '
helloworld

# 壓縮指定字符
$ echo "heeeeeeeeello world" | tr -s 'e'
hello world

# 字符集補(bǔ)集
$ echo "hello 12345 world" | tr -c -d '0-9'
12345
字符集格式(string1 / string2)

字符集合(即命令參數(shù)中的 string1 和 string2)用于指定需要替換或刪除的字符。'A-Za-z''A-F0-9'、'}.\t' 等都是合法的字符集合。

字符 含義
\b 退格符
\n 新行
\r 回車符
\t Tab 符
CHAR1-CHAR2 從 CHAR1 到 CHAR2 的所有字符(按 ASCII 字符順序)
[:alnum:] 所有字母和數(shù)字
[:alpha:] 所有字母
[:blank:] 所有空格和 Tab 字符
[:cntrl:] 所有控制字符
[:graph:] 所有可打印字符,不包括空格
[:lower:] 所有小寫字符
[:punct:] 所有標(biāo)點(diǎn)符號
[:space:] 所有橫向或縱向的空白字符
[:upper:] 所有大寫字符

二、cut 命令

cut 命令用于切割并篩選文本行中的指定部分,其操作對象可以是一個(gè)或多個(gè)文件,如未指定文件選項(xiàng)或該選項(xiàng)為 "-",則從標(biāo)準(zhǔn)輸入中讀取需要操作的內(nèi)容。

語法

cut <option> list [file ...]
其中 list 選項(xiàng)為由逗號分隔的數(shù)字或 "-" 號連接的數(shù)字范圍,用于指定文本行中需要顯示的字段。

  • N-:從第 N 個(gè)字節(jié)、字符、字段到結(jié)尾
  • N-M:從第 N 個(gè)字節(jié)、字符、字段到第 M 個(gè)(包括 M 在內(nèi))
  • -M:從第 1 個(gè)字節(jié)、字符、字段到第 M 個(gè)(包括 M 在內(nèi))
選項(xiàng)

-b list:list 選項(xiàng)指定的是 byte 的范圍
-c list:list 選項(xiàng)指定的是字符的范圍
-d:指定字段的分隔符,默認(rèn)是 Tab
-f list:list 選項(xiàng)指定的是字段的范圍

示例

用于演示的文件內(nèi)容如下:

$ cat students.txt
No  Name    Mark
01  rose    69
02  jack    71
03  alex    68

使用 -f 選項(xiàng)提取指定字段

$ cut -f 2,3 students.txt
Name    Mark
rose    69
jack    71
alex    68

使用 -d 選項(xiàng)指定字段分隔符

$ cat students2.txt
No,Name,Mark
01,rose,69
02,jack,71
03,alex,68
$ cut -f 2,3 -d "," students2.txt
Name,Mark
rose,69
jack,71
alex,68

使用 -c 選項(xiàng)提取指定字符范圍里的內(nèi)容

$ cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
$ cut -c -5 test.txt
abcde
abcde
abcde
$ cut -c 5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz

三、sort 命令

sort 命令用于將文件內(nèi)容進(jìn)行排序,并將排序結(jié)果打印到標(biāo)準(zhǔn)輸出。它將文件的每一行文本視為一個(gè)單位,從首字母向后,依次按該字母的 ASCII 碼值進(jìn)行比較,并按升序輸出。

選項(xiàng)

-b:忽略每行行首的空格字符
-c:檢查文件是否已按順序排序
-d:排序時(shí),只考慮字母、空格和數(shù)字,忽略其它字符
-f:排序時(shí),將小寫字母視為大寫字母(即忽略大小寫)
-i:排序時(shí),忽略所有非打印字符
-M:將前面三個(gè)字母按月份的縮寫進(jìn)行排序
-n:按照數(shù)值的大小進(jìn)行排序
-o:將排序好的結(jié)果輸出到指定文件中
-r:以相反的順序輸出排序后的結(jié)果
-t:指定排序時(shí)使用的欄位分隔符
-u:合并顯示內(nèi)容相同的行

示例

用于演示的文件內(nèi)容如下:

$ cat sort.txt
AAA:BB
aaa:4
ccc:10
bbb:20
bbb:8

簡單排序

$ sort sort.txt
AAA:BB
aaa:4
bbb:20
bbb:8
ccc:10

按照 BB 列的數(shù)字由大到小排序

$ sort -nr -t: -k2 sort.txt
bbb:20
ccc:10
bbb:8
aaa:4
AAA:BB
# -n 表示按照數(shù)字大小排序,-r 表示反向排序
# -t: 表示冒號作為欄位分隔符,-k2 表示第二欄(即 BB 列)作為排序依據(jù)

四、uniq 命令

uniq 命令用于報(bào)告或過濾文件中內(nèi)容重復(fù)的行

選項(xiàng)

-c:在每行輸出內(nèi)容的行首加上該行重復(fù)的次數(shù)
-d:僅顯示內(nèi)容重復(fù)的行
-u:僅顯示內(nèi)容未重復(fù)的行
-f:不比較指定的欄位
-s:不比較指定的字符

示例
# 源文件
$ cat uniq.txt
helloworld
helloworld
helloshell
hellotext

# 刪除重復(fù)行
$ uniq uniq.txt
helloworld
helloshell
hellotext

# 只顯示未重復(fù)的內(nèi)容
$ uniq -u uniq.txt
helloshell
hellotext

# 統(tǒng)計(jì)各行出現(xiàn)的次數(shù)
$ uniq -c uniq.txt
   2 helloworld
   1 helloshell
   1 hellotext
# 只顯示重復(fù)行
$ uniq -d uniq.txt
helloworld
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,717評論 0 5
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,537評論 1 19
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,265評論 2 33
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,221評論 0 0
  • 一直以來花錢都沒有特意節(jié)制過,總覺得自己一年開銷10多萬沒什么,畢竟結(jié)余率也有50%了呀。直到今年做完投資預(yù)算傻眼...
    希澤爾閱讀 384評論 9 2

友情鏈接更多精彩內(nèi)容