Linux 文件處理工具cut,sort,uniq,grep

一. cut

功能 : 數據切割,用於顯示每行從開頭算起 num1 到 num2 的文字。
語法 :
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
選項 :

-b 以字節爲單位進行分割
-c 以字符爲單位進行分割
-d 自定義分隔符,默認爲製表符
-f 與-d一起使用,指定顯示哪個區域

例如 :-b

[root@xiaoagiao ~]# cat ab
apple
apple
apple
Apple
apple q
apple q
apple q
bannan
shj
[root@xiaoagiao ~]# cut -b 4 ab//將文件每行第四個字符顯示出來。
l
l
l
l
l
l
l
n
  1. -c
[root@xiaoagiao ~]# cat ac
李雲龍
apple
王富貴
Apple
apple q
bannan
shj
[root@xiaoagiao ~]# cut -b 1 ac
▒
a
▒
A
a
b
s
[root@xiaoagiao ~]# cut -c 1 ac
李
a
王
A
a
b
s

數字可以代表區間。
如: 1-2 ,-2 (前兩個),2-(第二個往後)。

  1. - f -d
    cut -d ’ ’ -f 2 ab -->以空格爲分隔符顯示ac文件內容第二段。

二 . sort

功能 :將文件內容排序顯示。
語法 :sort [-option] file
選項 :

-f 忽略大小寫排序
-b 忽略最前面的空白字符
-M 以月份名字排序
-n 以純數字排序
-u 相鄰數據去重
-r 反向排序
-t 指定排序分隔符
-k 執行區間
-o filename 將結果保存在filename中

例如 :
-k和-t
sort -t ’ . ’ -k 2 file—>每行以 . 爲分隔符排序後面的內容。
sort -o newfile file —>將file的內容排序後放入newfile中。


三. uniq

功能 : 挑選排序過的文件中重複的行

-c 標註出現的次數(相鄰行)
-d 只輸出重複的行 (相鄰行)
-D 顯示所有重複行 (相鄰行)
-f 跳過前N行 是通過空白分割
-i 忽略大小寫
-s N 跳過前N行(除過第n行)
-u 只顯示唯一的行
-w N 每行的第N個字符之後不做對照

uniq [-option] file


四.grep(文本過濾工具)

grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹 配的行打印出來。
正則表達式:由一類特殊的字符以及文本字符所編寫的模式,並不代表字面含義,表達控制或者通配的功能。

  1. 命令格式:

grep [option] pattern file

  1. 命令功能:

用於過濾/搜索的特定字符。

3. 命令參數:

  • -i:忽略字符大小寫
  • -n:顯示行號
  • -E:支持使用擴展正則表達式
  • -o:打印匹配到的行
  • -v:顯示不能被匹配到的行
  • -A #:後幾行
  • -B #:前幾行
  • -C #:前後各幾行

例:
grep -A 3 root /etc/passwd
找到後三行中的root字符。
4. 字符匹配

  • . :匹配任意單個字符。

  • [ ] :匹配指定範圍內任意單個字符

  • [^] :匹配指定範圍外任意字符

  • [:alnum:] #文字數字字符

  • [:alpha:] #文字字符

  • [:digit:] #數字字符

  • [:graph:] #非空字符(非空格、控制字符)

  • [:lower:] #小寫字符

  • [:cntrl:] #控制字符

  • [:print:] #非空字符(包括空格)

  • [:punct:] #標點符號

  • [:space:] #所有空白字符(新行,空格,製表符)

  • [:upper:] #大寫字符

  • [:xdigit:] #十六進制數字(0-9,a-f,A-F)


5. 匹配次數
* :匹配其前面的字符任意次。0次,1次或者多次
在這裏插入圖片描述

  • .* :匹配任意長度的任意字符
    在這裏插入圖片描述

  • ? :匹配其前面的字符0次或者1次,最多一次

    [root@xiaoagiao ~]# grep 'x\?y' file
    abxy
    aby
    xxxxxxy
    yab
    
  • \ + :匹配其前面的字符1次或者多次,至少一次

[root@xiaoagiao ~]# grep 'x\+y' file
abxy
xxxxxxy

前四種雖然可以指定匹配次數,但不能規定準確的次數。

\{m\} 匹配其前面的字符m次
\ {m,n \ } 匹配其前面的字符至少m次,至多n次(m到n次)
\ {0,n \ } 匹配前邊字符至多n次
\ {m, \ } 匹配前邊的字符至少m次

如:’[a-z]\{5,10\}'匹配有5–10個連續小寫字母的行。


6. 位置錨定

  • ^:行首錨定,用於模式的最左側。
    如:’^grep’–>匹配所有以grep開頭的行。

  • $:行尾錨定,用於模式的最右側。
    如:’^grep’–>匹配所有以grep結尾的行。

  • ^ $:空白行

    如:^ [[:space:]]*$–>篩選空白或包含空白字符的行。

    ^pattern$–>用pattern來匹配整行。

  • \ <或者\b:詞首錨定,用於單詞的左側。

  • \ >或者\b:詞尾錨定,用於單詞的右側。
    如 : ‘\ <ab’–>匹配以ab開頭的行。


7. 分組引用。
\ (\ ):
**分組:**將一個或者多個字符捆綁在一起當作一個整體處理。
引用 :
分組括號內匹配的模式,會被正則表達式引擎記錄在內部變量中,通過變量進行應用。

  • \1:模式從左側起,第一個左括號與之匹配的右括號之間模式所匹配到的字符
  • \2: 模式從左側起,第二個左括號與之匹配的右括號之間模式所匹配到的字符。

  • 如 :grep ‘(l. .k)’ . * file

在這裏插入圖片描述

grep ‘(l. .k)’ . *\1 file

在這裏插入圖片描述
指定某一個分組後,會將第一個過濾的目標作爲指定目標,在當前行只找相同的字符
從而找到前後相同字符的行。

grep ’ (l . . k\ ). *( r . . t \ ). *\1’ file(兩個分組,匹配第一個)
grep ’ (l . . k\ ). *( r . . t \ ). * \1. *\2’ file(兩個分組,匹配兩個)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章