1. 文本處理工具的使用:
cat 連接文件并打印到標準輸出設備,但是文件較大時,翻屏太快,與more或者less連用
命令反著輸入(tac)將會反向輸出文本文件
用法: cat 選項 參數
選項:
-A 顯示不可打印字符
-b 對行進行編號,空白行不編號
-s 壓縮空白行
-n 對行進行編號,包括空白航
參數:
文件列表
示例:
[root@centos7 ~]# cat -A aa //加上-A可以看到表示換行的$符號 this is aa file line 1$ this is aa file line 2$ $ $ this is aa file line 3$ this is aa file line 4$ [root@centos7 ~]# cat -b aa //對行進行編號,不包括空白行 1 this is aa file line 1 2 this is aa file line 2 3 this is aa file line 3 4 this is aa file line 4 [root@centos7 ~]# cat -s aa //將行2和行3中間的兩個空行進行了壓縮 this is aa file line 1 this is aa file line 2 this is aa file line 3 this is aa file line 4 [root@centos7 ~]# tac aa //使用tac反向查看文件 this is aa file line 2 this is aa file line 1 [root@centos7 ~]# rev aa //使用rev將行內倒著輸出,效果如下 1 enil elif aa si siht 2 enil elif aa si siht
2. more和less,less命令的作用與more十分相似,都可以用來瀏覽文字檔案的內容,不同的是less命令允許用戶向前或向后瀏覽文件,而more命令只能向前瀏覽。用less命令顯示文件時,用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程序,應按Q鍵
more快捷鍵用法:
選項:
B鍵:翻頁時的上一屏
space鍵:翻頁下一屏
enter鍵:向前翻一行
Q鍵退出more命令
3. head和tail使用:head用于顯示文件的頭幾行內容,默認顯示前十行,可以使用-n 選項指定行數,tail與head功能類似,可以顯示文件的尾部,-n同樣可以指定顯示文件尾多少行 –f可以一直跟蹤一個文件內容變化
[root@centos7 ~]# tail -n0 -f aa & //將tail命令放入后臺并一直顯示
4. logger 觸發一條日志條目的更新
[root@centos7 ~]# tail -n 0 -f /var/log/messages & [2] 39486 [root@centos7 ~]# logger "this is a test log message" [root@centos7 ~]# Aug 5 15:04:21 centos7 root: this is a test log message
5. paste:合并文件的內容除了追加的方式還有兩個文件的每一行對應另一個文件的一行合并等如:
[root@centos7 ~]# cat aa //測試文件aa aaaaaaa aaaaaaa [root@centos7 ~]# cat bb //測試文件bb bbbbbbbbbbbbb bbbbbbbbbbbbbb [root@centos7 ~]# paste aa bb 一行內的合并 aaaaaaa bbbbbbbbbbbbb aaaaaaa bbbbbbbbbbbbbb [root@centos7 ~]# paste –s aa bb將本來應該一列顯示的內容顯示成一行 aaaaaaa aaaaaaa aaaaaa bbbbbbbbbbbbb bbbbbbbbbbbbbb bbbbbbbbbbb [root@centos7 ~]# paste -d* aa bb 指定分隔符為 * aaaaaaa*bbbbbbbbbbbbb aaaaaaa*bbbbbbbbbbbbbb aaaaaa*bbbbbbbbbbb
6. 正則表達式:regular expression :由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。正則表達式使用響應的算法,來實現字符的匹配。并且正則表達式分為兩類,不同的程序支持不同的正則表達式,有:
基本正則表達式,擴展正則表達式。并且正則表達式需要程序的支持:grep vim less nginx等
基本正則表達式:
字符匹配:
. 匹配任意單個字符;
[] : 匹配指定范圍內的任意單個字符
[^] : 匹配指定范圍外的任意單個字符
[:digit:] 所有數字
[:lower:] 所有小寫字母
[:upper:] 所有大寫字母
[:alpha:] 所有字母包括大小寫
[:punct:] 所有標點符號
[:space:] 空格和tab
匹配次數:用在要指定次數的字符后面,指定前面字符出現的次數
* 匹配前面的字符人一次包括0次
貪婪模式 盡可能長的匹配
.* 任意長度的任意字符
\? 匹配前面的字符0次或者1次
\+ 匹配前面字符最少一次
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符最少m次,最多n次,并且是閉區間
\{,n\} 匹配前面的字符最多n次
\{m,\} 匹配前面的字符最少m次
位置錨定:定位出現的位置
^ 行首錨定,模式的最左側
$ 行尾錨定,用于模式的最右側
^pattern$ 整行匹配
^$ 空行
^[[:space:]]*$ 空白行
\< (也可以用\b)詞首錨定,用于單詞模式
\> (也可以用\b) 詞尾錨定,用于單詞模式
分組: \(\) 將一個或多個字符捆綁在一起處理如\(root\)\+ 匹配多次root這個單詞,多個分組時,每一個括號匹配到的字符串都會保存在一個變量中 \1 ,\2 ,這些變量可以調用出來
7. grep 的使用:grep:(global search regular expresion and print out the line),根據用戶指定的模式進行匹配檢查,打印匹配的行
grep選項:
–color=auto 對匹配到的文本著色顯示
-v 取補集,即匹配到的條件的補集
-i 忽略大小寫
-n 顯示匹配到的行數
-c 統計匹配到的行數
-o 僅顯示匹配到的字符串
-q 不輸出任何信息
-A 或-B 或-C輸出后幾行或前幾行,A和B后加相應的數字。-C是AB的并集
-e 實現邏輯或關系
-E 使用擴展的正則表達式
擴展正則表達式與基本的差別:
(1)分組() ,匹配次數{m},{m,n}, + , ? 這些都沒有了\的轉義
(2)或操作:a |b, C|cat:C或cat (C|c)at :Cat或cat
具體示例:
(1)顯示/proc/meminfo 文件中以大小s 開頭的行;( 要求:使用兩種方式)
[root@centos7 ~]# cat /proc/meminfo | grep -e "^s.*" -e "^S.*" SwapCached: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB Shmem: 13472 kB Slab: 117520 kB SReclaimable: 69404 kB SUnreclaim: 48116 kB [root@centos7 ~]# cat /proc/meminfo | grep -e "^[sS].*" SwapCached: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB Shmem: 13472 kB Slab: 117520 kB SReclaimable: 69404 kB SUnreclaim: 48116 kB [root@centos7 ~]# cat /proc/meminfo | grep -E "^(s|S).*" SwapCached: 0 kB SwapTotal: 2097148 kB SwapFree: 2097148 kB Shmem: 13472 kB Slab: 117520 kB SReclaimable: 69404 kB SUnreclaim: 48116 kB
(2)顯示/etc/passwd 文件中不以/bin/bash 結尾的行
[root@centos7 ~]# grep -v "/bin/bash$" /etc/passwd
(3)顯示用戶rpc 默認的shell 程序
[root@centos7 ~]# grep "^rpc\>.*" /etc/passwd |cut -d: -f 7 /sbin/nologin
(4)找出/etc/passwd 中的兩位或三位數
[root@centos7 ~]# grep -Eo "[1-9][[:digit:]]{1,2}" /etc/passwd //o選項只打印匹配到的內容 12 11 12 100 14 50 99
(5)顯示/etc/grub2.cfg 文件中,至少以一個空白字符開頭的且后面存非空白字符的行
[root@centos7 ~]# grep "^[[:space:]][^[:space:]].*" /etc/grub2.cfg load_video set gfxpayload=keep insmod gzio ……
(6)找出"netstat -tan" 命令的結果中以'LISTEN' 后跟0 、1或多個空白字符結尾的行
[root@centos7 ~]# netstat -tan | grep -e "LISTEN[[:space:]]*$" tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
(7)添加用戶bash 、testbash 、basher 以及nologin( 其shell為 為/sbin/nologin), 而后找出/etc/passwd 文件中用戶名同shell名的行
[root@centos7 ~]# grep -E "(^[[:alnum:]]+).*/\1$" /etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt bash:x:1008:1008::/home/bash:/bin/bash basher:x:1010:1010::/home/basher:/bin/bash
(7)找出/etc/rc.d/init.d/functions 文件中行首為某單詞(包
括下劃線)
grep -e "[[:alpha:]_]*().*" /etc/rc.d/init.d/functions
(8)使用egrep 取出/etc/rc.d/init.d/functions基名,和目錄名:
echo /etc/rc.d/init.d/functions | grep -E "[^/][[:alpha:]]+$" -o echo /etc/rc.d/init.d/functions | grep -E "[[:alpha:]/]+.*/" -o
(9)利用擴展正則表達式分別表示0-9 、10-99 、100-199、 、
200-249 、250-255
[root@cnode6_8 ~]# grep -we "[[:digit:]]\{1,1\}" a.log //0-9 0 1 2 22 34 4 5 10 11 111 23 100 123 234 244 250 10000 999 [root@cnode6_8 ~]# grep -we "[1-9][[:digit:]]" a.log //10-99 01 0 1 2 22 34 4 5 10 11 111 23 100 123 234 244 250 10000 999 [root@cnode6_8 ~]# grep -we "1[[:digit:]][[:digit:]]" a.log //100-199 [root@cnode6_8 ~]# grep -we "2[0-4][[:digit:]]" a.log //200-249 [root@cnode6_8 ~]# grep -we "25[[0-5]]" a.log
(10)顯示ifconfig命令結果中ipv4地址
[root@cnode6_8 ~]# ifconfig| grep 'inet\>'|cut -d: -f2|tr -s " " |cut -d " " -f1
統計/etc/rc.d/init.d/function中單詞出現的次數
cat /etc/rc.d/init.d/functions |tr -c "[[:alnum:]]" "\n"|tr "[]" "\n"|tr -s "[[:space:]]"|sort |uniq –c
(11)用正則表達式表示手機號11 13 17 15 18
grep -e "1[13578][[:digit:]]\{9\}[^[:digit:]]
用正則表達式表示身份證號18
[root@centos7 ~]# grep -E "\<[1-9][[:digit:]]{16}[[:digit:]x]\>" aa 123456789012345678
(12)用正則表達式表示郵箱
[root@centos7 ~]# grep -E "\<[[:alnum:]_]{1,16}@[[:alnum:]]{1,20}.com" mail_test.txt
(13)用正則表達式表示IP地址
[root@centos7~]# grep -E "(((\<[[:digit:]]\>)|(\<[1-9][[:digit:]]\>)|(\<1[[:digit:]]{2,2}\>)|(\<2[0-4][[:digit:]]\>)|\<(25[0-5]\>)).){3}((\<[[:digit:]]\>)|(\<[1-9][[:digit:]]\>)|(\<1[[:digit:]]{2,2}\>)|(\<2[0-4][[:digit:]]\>)|\<(25[0-5]\>))" IPtest.txt
注意:方括號是匹配一個字符,里面加了()也不會把小括號里面的內容當成一個整體,而是把小括號當成一個普通字符匹配:
[root@centos7 testdir]# grep -E "[(jack)(34)]" aa
34 () (78 789 jac jack cui 23jack23
[root@centos7 testdir]# grep -E "(jack)|(34)" aa
34 () (78 789 jac jack cui 23jack23
原創文章,作者:jack_cui,如若轉載,請注明出處:http://www.www58058.com/30115