一、文件查看命令
(1)普通查看工具:cat,tac,rev
1、cat命令常用選項
-n:顯示行號
-E:顯示行結束符$
-A:顯示所有控制符
2、tac:從最后一行開始倒序顯示
3、rev:將每一行的內容反轉顯示
(2)分頁查看內容:more,less
less功能比more多
less是man幫助使用的分頁器,用法與man相同
(3)顯示文本前或后行內容:head,tail
1.head與tail通用選項
-c#:獲取指定#字節內容
-n #或-#:獲取指定行數
2.tail-f:跟蹤顯示文件新追加內容
二、文本處理工具
(1)按列抽取文本工具:cut
-c:按字符切割
-d:按分隔符切割
-f:指明顯示區域
如,-f1、-f 1,3,5、-f 2-4、-f 1,5-9
查看passwd文件,顯示UID及shell類型
[root@centos7 tmp]# head -5 /etc/passwd |cut -d: -f3,7 0:/bin/bash 1:/sbin/nologin 2:/sbin/nologin 3:/sbin/nologin 4:/sbin/nologin
(2)分析文本的工具:wc,sort,uniq
1. wc:統計行數,單詞數,字符數,字節數
-l:只統計行數
-w:只統計單詞數
-m:只統計字符數
-c:只統計字節數
如下,分別顯示行數,單詞數,字符數
[root@centos7 tmp]# wc /etc/passwd 48 93 2513 /etc/passwd
(3)文本排序工具:sort
把排序后的文本輸出到STDOUT,不改變原文件
常用選項:
-n:按數字大小排序
-h:按人類易讀單位排序
-f:忽略(fold)字符串中的大小寫
-u:刪除選項中重復的行
-t:按指定分隔符
-k #:按分隔符隔開的第#列進行排序,可重復使用
(4)重復行處理工具:uniq
常用選項:
-c:顯示每行重復的次數
-d:僅顯示重復的行
-u:僅顯示不重復的行
常和sort結合使用
sort|uniq -c
例子,統計所用用戶shell類型使用個數
[root@centos7 ~]# cut -d: -f7 /etc/passwd|uniq -c #沒有sort排序得到錯誤結果 1 /bin/bash 4 /sbin/nologin 1 /bin/sync 1 /sbin/shutdown 1 /sbin/halt 35 /sbin/nologin 4 /bin/bash 1 /sbin/nologin [root@centos7 ~]# cut -d: -f7 /etc/passwd|sort|uniq -c #sort結合uniq使用得到正確結果 5 /bin/bash 1 /bin/sync 1 /sbin/halt 40 /sbin/nologin 1 /sbin/shutdown
(5)其他工具:paste,diff,patch
1.paste:將連個文件同行合并
2.diff:比較兩個文件的區別
3.patch:復制在其他文件中的改變
diff -u file.old file.new >patch.dd #將比較信息輸出到文件中 patch file.old patch.dd #通過補丁對文件更新
三、grep
grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行;
egrep等價于grep -E,支持擴展正則表達式
fgrep等價于grep -F 不支持正則表達式,但速度快
(1)grep [OPTIONS] PATTERN [FILE…]
常用選項:
-n:顯示匹配的行號
-c: 統計匹配的行數
-v: 顯示不能夠被pattern匹配到的行
-o: 僅顯示匹配到的字符串
-i: 忽略字符大小寫
-w:整行匹配整個單詞
-e:實現多個選項間的邏輯or關系
grep –e ‘cat ’ -e ‘dog’ file
-q: 靜默模式,不輸出任何信息
-A #:after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-E:使用ERE
四、正則表達式
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,
而表示控制或通配的功能。
正則表達式分為兩類:
1.基本正則表達式:BRE
2.擴展正則表達式:ERE
元字符分類:字符匹配、匹配次數、位置錨定、分組
(1)字符匹配
–構成模式的基本元素
. : 匹配任意單個字符
[]: 匹配指定范圍內的任意單個字符
[0-9],[a-zA-Z],[a-z0-9]…
[^]:匹配指定范圍外的任意單個字符
[^0-9]非數字
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
(2)匹配次數
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
*:匹配前面的字符任意次,包括0次;貪婪模式:盡可能長的匹配
.*:任意長度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
(3)位置錨定
位置錨定:定位出現的位置;更加精確描述字符的位置
–這部分用法比較靈活,容易忘記錨定,造成錯誤匹配
^:行首錨定,用于模式的最左側
$:行尾錨定,用于模式的最右側
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 \b:詞首錨定,用于單詞模式
\> 或 \b:詞尾錨定;用于單詞模式
\<PATTERN\>:匹配整個單詞
(4)分組
分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:\(root\)\+
分組括號中的模式匹配到的內容會被正則表達式引擎記w錄于內部的變量中,這些變量的命名方式為: \1,\2,\3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
實例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)
例子:添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用 戶名同shell名的行
[root@centos7 movie]# egrep "^(.*\>).*\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 nologin:x:1005:1005::/home/nologin:/sbin/nologin
^(.*\>)——某個開頭的單詞
\1$———-以(.*\>)這個單詞結尾
這樣就找到符合題意的行
擴展正則表達式的元字符
(1)字符匹配
保持不變
(2)匹配次數
\+ –> +
\? –> ?
\{\} –> {}
(3) 位置錨定
保持不變
(4) 分組
\(\) –>()
后向引用:\1,\2,\3…
(5) 或者表示
cat|dog :cat或dog
(C|c)at:Cat或cat
*****牛刀小試******
1、顯示當前系統root、fly或halt用戶的UID和默認shell
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
4、使用egrep取出上面路徑的目錄名
答案:
1.egrep "^(root|fly|halt)\>" /etc/passwd|cut -d: -f3,7
2.egrep "^[a-zA-Z_]+\(\).*" /etc/rc.d/init.d/functions
3.egrep -o "[^/]+/?$"
4.egrep -o ".*\<"
原創文章,作者:cutemsyu,如若轉載,請注明出處:http://www.www58058.com/31757