文件查看工具
cat,tac,rev,more,less,head,tail
cat:查看文本
cat [OPTION]… [FILE]…
-E:顯示行結束符$
-n:對顯示出的每一行進行編號
tac:查看文件
功能同cat命令,但是cat正序顯示文件,tac反序顯示文件
tac [OPTION]… [FILE]…
-E:顯示行結束符$
-n:對顯示出的每一行進行編號
rev:查看文件
按正序的行顯示文件,但行中內容按反序顯示
[root@CentOS6 ~]# cat acl3
g:g2:wx
d:g:g2:wx
[root@CentOS6 ~]# tac acl3
d:g:g2:wx
g:g2:wx
[root@CentOS6 ~]# rev acl3
xw:2g:g
xw:2g:g:d
more:分頁查看文件,到末尾自動退出
more [OPTIONS…] FILE…
less:一頁一頁地查看文件,到末尾時不退出
查找字符串的命令:
/PATTERN 搜索文本
?PATTERN 搜索文本
n:下一個匹配的字符串
N:上一個匹配的字符串
less命令是man命令使用的分頁器(同man的翻頁手法)
head:查看文件的前面幾行,默認查看前10行
head [OPTION]… [FILE]…
-n #:指定獲取前#行
-#:指定前#行
[root@CentOS6 ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
tail:查看文件的后面幾行,默認查看后10行
tail [OPTION]… [FILE]…
-n #:指定獲取后#行
-#:指定獲取后#行
-f:跟蹤顯示文件新追加的內容
eg:tail -n0 -f file 只查看file文本的新加的行
[root@CentOS6 ~]# tail -3 /etc/passwd
tom4:x:509:509::/home/tom4:/bin/bash
tom5:x:510:510::/home/tom5:/bin/bash
hadoop:x:511:511::/home/hadoop:/bin/bash
文件查看及處理工具
cut,paste,wc,sort,diff
cut:查看文件并切割文件
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#:第#個字段
#,#[,#] :離散的多個字段,例如1,3,6
如果是3,1其排序結果也是1,3
#-# :連續的多個字段, 例如1-6
-c:按字符切割
-dB:等同于 -d " "
–output-delimiter=STRING指定輸出分隔符
[root@CentOS6 ~]# tail -3 /etc/passwd | cut -d: -f3,7,1
tom4:509:/bin/bash
tom5:510:/bin/bash
hadoop:511:/bin/bash
paste 合并兩個文件同行號的列到一行
paste [OPTION]… [FILE]…
-d:指定分隔符,默認用TAB
-s:所有行合成一行顯示
paste -d: f1 f2
[root@CentOS6 ~]# cat acl1 acl2
g:g2:rw
d:g:g2:rw
g:g3:r
d:g:g3:r
g:g2:rx
d:g:g2:rx
g:g3:r
d:g:g3:r
[root@CentOS6 ~]# paste -d: acl1 acl2
g:g2:rw:g:g2:rx
d:g:g2:rw:d:g:g2:rx
g:g3:r:g:g3:r
d:g:g3:r:d:g:g3:r
wc:文本數據統計
# wc acl1
4 4 34 acl1
行數 字數 字符數 文件名
-l 只計數行數
-w 只計數單詞總數
-c 只計數字節總數
-m 只計數字符總數
sort:文本排序
sort [options] file(s)
-n 執行按數字大小整理
-t char 使用char做分隔符
-k # 指定排序時安#行的數據對file進行排序
-r 反向排序
-f 忽略字符大小寫
-u 刪除輸出中的重復行
[root@CentOS6 ~]# sort -t: -k3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
uniq:報告或移除重復的行
uniq [OPTION]… [FILE]…
-c: 顯示每行重復出現的次數(重復行只顯示一次)
-d: 僅顯示重復過的行
-u: 僅顯示不曾重復的行
連續且完全相同的行方為重復
常和sort命令一起配合使用,效果更好
eg:cut -d: -f7 /etc/passwd | sort | uniq -c
[root@CentOS6 ~]# cut -d: -f7 /etc/passwd |sort |uniq -c
15 /bin/bash
1 /bin/sync
1 /sbin/halt
29 /sbin/nologin
1 /sbin/shutdown
練習:1 、找出ifconfig 命令結果中本機的所有IPv4 地址
2 、查出分區空間使用率的最大百分比值
3 、查出用戶UID最大值的用戶名、UID 及shell 類型
4 、查出/tmp的權限,以數字方式顯示
diff:比較文件
diff命令的輸出被保存在一種叫做“補丁”的文件中
diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE
-u:使用unified機制,顯示要修改的行的上下文,默認顯示3行
patch:向文件打補丁
適用-b選項來自動備份改變了的文件,老文件的新名叫file.orig
patch /PATH/TO/OLDFILE < /PATH/TO/TATCH_FILE
-R選項:恢復老文件
[root@CentOS6 testdir]# cp /etc/fstab ./
cp: overwrite `./fstab'? y
[root@CentOS6 testdir]# cp fstab fstab.cg
[root@CentOS6 testdir]# vi fstab.cg
[root@CentOS6 testdir]# diff -u fstab fstab.cg > fstab.patch
[root@CentOS6 testdir]# diff fstab fstab.cg
5c5
< #
—
> # hello world
[root@CentOS6 testdir]# patch fstab < fstab.patch
patching file fstab
[root@CentOS6 testdir]# diff fstab fstab.cg
Linux上文本處理三劍客
grep :文本過濾( 模式:pattern) 工具;
grep, egrep, fgrep (不支持正則表達式搜索,只支持純文本搜索)
sed :stream editor ,流編輯器,文本編輯工具;
awk :Linux 上的實際為gawk(GNU awk) ,文本報告生成器;
正則表達式:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
支持正則表達式的程序:grep, vim, less,nginx等
正則表達式分兩類:
基本正則表達式:BRE
grep ,egrep -G
擴展正則表達式:ERE
grep -E, egrep
正則表達式引擎:
采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
元字符分類:字符匹配、匹配次數、位置錨定、分組
grep
grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行;
模式:由正則表達式字符及文本字符所編寫的過濾條件
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
–color=auto: 對匹配到的文本著色顯示;
-v: 顯示不能夠被pattern匹配到的行;
-i: 忽略字符大小寫
-n:顯示匹配的行號
-c: 統計匹配的行數,而不顯示匹配到的內容
-o: 僅顯示匹配到的字符串;
-q: 靜默模式,不輸出任何信息
-A #:after,顯示匹配的行及其后#行
-B #: before,顯示匹配的行及其前#行
-C #:context,顯示匹配的行及其前后各#行
-e:實現多個選項間的邏輯or關系
grep –e 'cat' -e 'dog' file
-E:使用ERE
擴展的正則表達式
基本正則表達式元字符:
字符匹配:
. : 匹配任意單個字符;
[]: 匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數,默認工作在貪婪模式:盡可能長的匹配
* :匹配前面的字符任意次,包括0次
.* :任意長度的任意字符
\? :匹配其前面的字符0或1次
\+ :匹配其前面的字符至少1次
\{m\} :匹配前面的字符m次
\{m,n\} :匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
<=n次
\{m,\} :匹配前面的字符至少m次
>=m次
位置錨定:定位出現的位置
^ :行首錨定,用于模式的最左側
$ :行尾錨定,用于模式的最右側
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :詞首錨定,用于單詞模式的左側
\> 或 \b :詞尾錨定;用于單詞模式的右側
注意:在grep中,字母和數字的組合也被視為單詞
\<PATTERN\>:錨定以PATTERN表達式做為單詞的行
分組及引用
\(\):將1個或多個字符捆綁在一起作為一個整體進行處理
\(xy\)*ab:xy作為一個整體出現0此或多次
注意:分組括號中的模式匹配到的內容會被正則表達式引擎記錄與內部變量中,這些變量為:
\1:模式從左側起,第一個左括號以及與其匹配的右括號之間的內容
\2:模式從左側起,第二個左括號以及與其匹配的右括號之間的內容
\3:
……
后向引用:引用前面的分組括號中的模式所匹配的字符,且引用中的數據和分組模式匹配到的數據是一樣
練習:1、顯示/etc/passwd 文件中不以/bin/bash 結尾的行
2 、顯示用戶rpc 默認的shell 程序
3 、找出/etc/passwd 中的兩位或三位數
4 、找出"netstat -tan" 命令的結果中以'LISTEN' 后跟0 、1或多個空白字符結尾的行
egrep 及擴展的正則表達式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE…]
選項:-i,-o,-v,q,-A,-B,-C
-G:支持基本的正則表達式
擴展正則表達式元字符:
字符匹配:
.: 匹配任意單個字符;
[]: 匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數,默認工作在貪婪模式,盡可能長的匹配
* :匹配前面的字符任意次,包括0次
.* :任意長度的任意字符
? :匹配其前面的字符0或1次
+ :匹配其前面的字符至少1次
{m} :匹配前面的字符m次
{m,n} :匹配前面的字符至少m次,至多n次
{,n} :匹配前面的字符至多n次
<=n次
{m,} :匹配前面的字符至少m次
>=m次
位置錨定:定位出現的位置
^ :行首錨定
$ :行尾錨定
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :詞首錨定
\> 或 \b :詞尾錨定
注意:在grep中,字母和數字的組合也被視為單詞
\<PATTERN\>:錨定以PATTERN表達式做為單詞的行
分組及引用
():括號內模式會被記錄于正則表達式引擎中:
后向引用:\1,\2,\3……
或者
a|b:a或者b
eg:C|cat :表示C或者cat
(C|c)at :表示Cat或者cat
練習:1 、顯示當前系統上,root,gao和user1用戶的相關信息
2 、統計以root 身份登錄的每個遠程主機IP
3 、使用egrep 取出/etc/rc.d/init.d/functions
原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/30235