Linux文件處理工具
一. 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
- -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-(第二個往後)。
- - 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命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹 配的行打印出來。
正則表達式:由一類特殊的字符以及文本字符所編寫的模式,並不代表字面含義,表達控制或者通配的功能。
- 命令格式:
grep [option] pattern file
- 命令功能:
用於過濾/搜索的特定字符。
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(兩個分組,匹配兩個)