文本處理工具
文本工具
文件查看命令:cat,tac,rev
cat:連接文件并顯示到標準輸出設備上
選項
-E:顯示行結束符$
-n:對顯示的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
[root@localhost ~]# cat -n a ==>編號 1 aaaaa 2 3 4 eeeee [root@localhost ~]# cat -E a ==>行結束符 aaaaa$ $ $ eeeee$ [root@localhost ~]# cat -A a ==>所有控制符 aaaaa$ $ $ eeeee$ [root@localhost ~]# cat -sn a ==>壓縮連續空行并編號 1 aaaaa 2 3 eeeee [root@localhost ~]# cat -b a ==>非空行編號 1 aaaaa 2 eeeee
tac:將文件以行尾單位反序輸出 ==>和cat相反
[root@localhost ~]# cat a aaaaa eeeee [root@localhost ~]# tac a ==>反序輸出 eeeee aaaaa [root@localhost ~]#
rev:將文件的每行內容以字符為單位反序輸出,即第一個最后輸出,最后一個字符最先輸出,依次
[root@localhost ~]# cat b 1 2 3 4 5 6 7 8 9 10 [root@localhost ~]# rev b 01 9 8 7 6 5 4 3 2 1 ==>注意是以字符為單位反序輸出
more:分頁查看文件 ==>只能向前瀏覽
常用翻頁快捷鍵:
space :每次翻一屏
enter:每次翻一行
b:顯示上一屏內容
q:退出
less:和more相似
常用翻頁選項
PageUp:向上翻一行,
PageDown:向下翻一行
space :每次翻一屏
enter:每次翻一行
/pattern:搜索關鍵字
n/N:跳到上一個或者下一個關鍵字
head:顯示文件前#行,默認顯示10行
tail:顯示文件的后#行。默認10行
[root@localhost ~]# cat a aaaaa 11111 22222 eeeee 55555 66666 00000 [root@localhost ~]# head -3 a ==>顯示前三行 aaaaa 11111 22222 [root@localhost ~]# tail -3 a ==>顯示后三行 55555 66666 00000
選項:
-c #:指定獲取前或后#字節
-n #:指定獲取前或后#行
-# :指定行數
-f:跟蹤顯示文件新追加的內容,常用于日志監控
日志監控:tail -n 0 -f /var/log/messages 只顯示新日志信息,其他不顯示
cut:顯示行中的指定部分,刪除文件中指定字段
-d 分隔符 :指明分隔符,默認tab
-f 字段:
#:第#個字段
#,#,#:離散的多個字段
#-#:連續的多個字段
-c:按字符切割
簡單實用案例
顯示用戶wangcai 默認的shell 程序
[root@localhost ~]# getent passwd wangcai wangcai:x:4325:4325::/home/wangcai:/bin/bash [root@localhost ~]# getent passwd wangcai|cut -d: -f7 ==>以:為分隔符,第七個字段就是shell /bin/bash
paste:將多個文件按照隊列進行合并
-d:指明分隔符,默認tab
-s:所有行合并一行顯示
[root@localhost ~]# paste -d: a b ==>使用分隔符:來按照隊列合并 aaaaa: 11111:1 2 3 4 5 6 7 8 9 10 22222:x c v b e r t y q qw eeeee: 55555: 66666: 00000: [root@localhost ~]# paste -s a b ==>合并成一行顯示 aaaaa 11111 22222 eeeee 55555 66666 00000 1 2 3 4 5 6 7 8 9 10 x c v b e r t y q qw
wc:單詞統計,顯示單詞字節行數
-c:顯示字節
-l:顯示行
-w:單詞
[root@localhost ~]# cat -A a aaaaa$ 11111$ 22222$ eeeee$ 55555$ 66666$ 00000$ [root@localhost ~]# cat a |wc 7 7 42 ==>7行,7個單詞,42個字節
sort:將文件排序,并將文件排序結果標準輸出
-r:執行反向(由上至下)整理
-n:執行案數字排序
-f:選項忽略(fold)字符串的字符大小
-u:選項(獨特,unique)刪除輸出中的重復行
-t c:選項使用做字段界定符
-k x:選項按照使用c字符分隔的x列來整理能夠使用多次
[root@localhost ~]# sort -r a ==>方向排序 66666 55555 11111 00000 [root@localhost ~]# sort -n a ==>數字排序 00000 11111 55555 66666 [root@localhost ~]# sort -u a ==>刪除重復行 00000 11111 55555 66666
以上為簡單列子,實際運用后面作業里會詳細說明
uniq:從輸入中刪除重復的前后相連接的行
-c:顯示每行重復出現的次數
-d:僅顯示重復過的行
-u:僅顯示不重復的行
連續且完全相同為重復
[root@localhost ~]# uniq -c a ==>重復行出現次數 1 11111 2 1 55555 1 66666 1 00000 [root@localhost ~]# uniq -d a ==>僅顯示重復行 [root@localhost ~]# uniq -u a ==>僅顯示不重復行 11111 55555 66666 00000
diff:逐行比較文件的不同之處
[root@localhost ~]# ll hah/ ==>文件1,2,3 total 8 -rw-r--r-- 1 root root 6 Aug 5 20:41 1 -rw-r--r-- 1 root root 6 Aug 5 20:41 2 -rw-r--r-- 1 root root 6 Aug 5 20:40 3 [root@localhost ~]# ll heh/ ==>文件3,4,5 total 0 -rw-r--r-- 1 root root 0 Aug 5 20:40 3 -rw-r--r-- 1 root root 0 Aug 5 20:40 4 -rw-r--r-- 1 root root 0 Aug 5 20:40 5 [root@localhost ~]# diff heh hah Only in hah: 1 Only in hah: 2 ==>比較目錄下相同文件名的文件,不會對目錄中的文件進行比較 Only in heh: 4 Only in heh: 5
diff 命令的輸出被保存在一種叫做“補丁”的文件中
使用 -u 選項來輸出“統一的(unified )”diff 格式文 件,最適用于補丁文件。
patch 命令復制在其它文件中進行的改變(要謹慎使用?。?/p>
? 適用 -b 選項來自動備份改變了的文件
$ diff -u foo.conf-broken foo.conf-works > foo.patch
$ patch -b foo.conf-broken foo.patch
文本處理三劍客:
grep :(global search regular expression(RE) and print out the line
文本搜索工具,根據用戶指定的”模式“對目標文本逐行進行匹配檢查,顯示匹配到的行
模式:有正則表達式字符及文本字符所編寫的過濾字符條件
選項:
–color=auto:對匹配到的文本著色顯示; ==>centos7上以定義別名alias grep='grep –color=auto'
-v:顯示不能被模式匹配到的行
-i:忽略字符大小寫
-n:顯示匹配到的行號
-c:統計匹配的行數
-o:僅顯示匹配到的字符串
-q:靜默模式,不輸出任何信息
-A #:after,顯示后#行
-B #:before, 顯示前#行
-C #:context,前后各#行
-e:實現多個選項間的邏輯er關系
grep –e ‘cat ’ -e ‘dog’ file
-w:整行匹配整個單詞
-E:支持ERE(擴展正則表達式)
[root@localhost ~]# cat a 11111 AAAAA aaaaa 55555 66666 00000 [root@localhost ~]# grep -i 'a' a ==>忽略大小寫,匹配到aaaaa和AAAAA AAAAA aaaaa [root@localhost ~]# grep -c 'a' a ==>匹配到一次 1 [root@localhost ~]# grep -ci 'a' a ==>匹配到兩次 2 [root@localhost ~]# grep -o 'a' a ==>僅顯示匹配的內容 a a a a a [root@localhost ~]# grep -oi 'a' a ==>僅顯示匹配的內容 A A A A A a a a a a [root@localhost ~]# cat a|grep -A2 "a" ==>匹配的后兩行 aaaaa 55555 66666 [root@localhost ~]# cat a|grep -B2 "a" ==>匹配的前兩行 11111 AAAAA aaaaa [root@localhost ~]# cat a|grep -C2 "a" ==>匹配的前后各兩行 11111 AAAAA aaaaa 55555 66666
基本正則表達式的元字符:
字符匹配:
. :匹配任意單個字符
[] :匹配指定范圍內的任意單個字符
[^]:匹配指定范圍內的任意單個字符
[:digit:]:數字
[:lower:]:小寫字母
[:upper:]:大寫字母
[:alpha:]:所有字母
[:alnum:]:所有數字和字母
[:space:]:空白字符(包含空格和tab)
[:punct:]:標點符號
[root@localhost ~]# cat a|grep 'A' ==>匹配字符A AAAAA [root@localhost ~]# cat a|grep '[^A]' ==>匹配A以外的任意字符 11111 aaaaa 55555 66666 00000 [root@localhost ~]# cat a|grep '[[:digit:]]' ==>匹配數字 11111 55555 66666 00000
次數匹配
* :匹配前面的字符任意此,包括0次 ==>默認貪婪模式,盡可能長的匹配
.* :任意長度的任意字符
\? :匹配其前面的字符0次或1次
\+ :匹配前面的字符至少一次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
位置錨定
^ :行首錨定,用于模式的最左側
$ :行尾錨定,用于模式的最右則
^pattern$ :用于模式匹配整行
^$:空行
^[[:space:]]*$ :空白行
\<或\b:詞首錨定,用于單詞模式的左側
\>或\b:詞尾錨定,用于單詞模式的右側
\<pattern\>:匹配整個單詞
小使用案例:
執行了指令:grep "\<[0-9]\{2,3\}\>" /etc/passwd
說明:
\< \>:錨定了詞首和詞尾,說明匹配的是整個單詞
[0-9]:數字
\{2,3\}:前面數字出現了2-3次
/etc/passwd :指定文件
上面表示找出/etc/passwd文件中的兩位數或三位數
分組及引用
分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如\(root\)
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,
這些變量的命名方式為:\1,\2,\3,….
\1:表示從左側起,第一個左括號以及與之匹配右括號之前的模式所匹配到的字符
實例:\(string1\+\(string2\)*\)
\1:string\+\(string2\)*
\2:string2
后向引用:引用前面的分括號中的模式所匹配字符(而非模式本身)
egrep:擴展正則表達式,和grep -E效果相似
字符匹配:
. :任意單個字符
[] :指定范圍內的字符
[^]:指定范圍外的字符
次數匹配:
* :匹配前面字符任意次
? :0次或1次
+ :至少一次
{m} :匹配m次
{m,n}:匹配至少m次,至多n次
位置錨定:
^:錨定行首
$:錨定行尾
\<或\b:錨定詞首
\>或\b:錨定詞尾
上面的小案例,使用擴展正則表達式來解決
\< \>:錨定詞首詞尾,匹配單詞
[0-9]:數字
{2,3}:2次或者3次,這里和上面的不同,沒有使用轉義符"\"
/etc/passwd:文件
找出/etc/passwd文件中的兩位數或三位數,和上面結果一樣
分組:
()
后向引用: \1,\2
或者
a|b
C|cat :C或者cat
(C|c)at: Cat或cat
擴展正則表達式其實和基本正則表達式差不多,差異在于,擴展正則表達式在使用元字符時,
不需要用于轉義的"\"
以上都是些概念性的知識,不是很好理解,在博客作業中有實際用法
原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/29734