1. 程式人生 > 其它 >Linux三劍客之sed/檔案處理命令

Linux三劍客之sed/檔案處理命令

檔案處理命令

一、sort命令

sort命令用於將檔案內容加以排序
-n 依照數值的大小排序 預設按照每行的一個字元排序
[root@judyju ~]# cat test.txt | sort -n
-r 以相反的順序來排序
[root@judyju ~]# cat test.txt | sort -n -r
-以某列進行排序
[root@judyju ~]# cat test.txt | sort -k2
-指定分割符,預設是以空格為分隔符

二、uniq命令

uniq命令用於檢查及刪除文字檔案中重複出現的行列,一般和sort命令結合使用。
	-c 在每列旁邊顯示改行出現的次數
	[root@judyju ~]# cat test.txt | uniq -c
	1 iiiiii
	1 qqqqqq
	1 hellohey
	-d 僅顯示重複出現的行列
	[root@judyju ~]# cat test.txt | uniq -d -c
	2 guantou
	-u 僅顯示出一次的行列
	[root@judyju ~]# cat test.txt | uniq -u

三、cut命令

cut命令通常用來顯示行中的指定部分,刪除檔案中的指定欄位
	-d 指定欄位的分隔符 預設為欄位分隔符TAB
	-f 顯示指定欄位的內容
	[root@judyju ~]# cut -f1 -d':' /etc/passwd
	-->我們可以發現passwd這個檔案裡面的內容是有規律的,這樣我們就可以用cut命令把這個檔案中的第一列拿出來,命令如圖所示

四、tr命令

tr命令用來替換或者刪除命令 
-d 刪除字元
-s 刪除所有重複出現的字元序列,只保留第一個;即將重複出現的字串壓縮為一個字串

案例

1、將檔案中出現的ah替換成op
[root@judyju ~]# cat test.txt | tr 'ab' 'op'
⚠️:這裡是一個一個地單一替換,也就是說凡是在檔案中出現的a字母,都替換成o,而不是整個字串替換
2、使用tr命令聽一字母大小寫
[root@judyju ~]# cat test.txt | tr [a-z] [A-Z]
3、刪除檔案中'guantou'字樣
[root@judyju ~]# cat test.txt | tr -d 'guantou'
⚠️:這裡是一個一個單個字元刪除的,也就是說凡是在檔案中出現的以上字串的字母都會被刪除
4、刪除連續著的字母,只保留第一個
[root@judyju ~]# cat test.txt | tr -s [a-zA-Z]

五、wc命令

wc命令是用來統計和計算數字的
	-c 統計檔案的Bytes數
	[root@judyju ~]# cat test.txt | wc -c 
	-l 統計檔案的行數
	[root@judyju ~]# cat test.txt | wc -l
	-w 統計檔案中單詞的個數,預設以空白字元作分隔符,在linux系統一段連續的數字或字母組合為一個詞
	[root@judyju ~]# cat test.txt | wc -w

Linux三劍客之sed

一、概念

sed的全稱是stream editor,流式編輯器,sed主要用來自動編輯一個或者多個檔案,簡化對檔案的反覆操作,簡化對檔案的反覆操作,編寫轉換程式等。

二、格式

sed [options] 'command' [file]
sed [options] -f scripfile 

三、引數

-e #允許多項編輯
-n #取消預設輸出
-i  #就地編輯<編輯完直接寫入檔案>
-r  #支援拓展正則
-f  #指定sed匹配指令碼檔案

四、定位

1、數字定位法,用數字指定行號
[root@judyju ~]# sed '5d' test.txt -->刪除第5行
[root@judyju ~]# sed '1,3d' test.txt -->刪除1到3行
2、正則定位法
[root@judyju ~]# sed '/^h/d' test.txt-->刪除以h開頭的行
3、數字正則定位法
[root@judyju ~]# sed '/^i/,6d' test.txt-->刪除i開頭的那一行到第6行
4、正則正則定位法
[root@judyju ~]# sed '/^i/,/u$/d' test.txt-->刪除以i開頭的那一行到以u結尾的那一行

五、sed的編輯模式

d #刪除
[root@judyju ~]# sed '/^i/,6d' test.txt
p #列印
[root@judyju ~]# sed -n '1p' test.txt -->只顯示第一行,因為-n引數是取消預設輸出的
a #在當前行後新增一行或者多行
[root@judyju ~]# sed '2a100imjudy\n101imjudy' test.txt-->在第2行的後面加2行
c #用新文字修改(替換)當前行 
[root@judyju ~]# sed '3c3bbbbb' test.txt
i #在當前行之前插入文字(單獨使用時)
[root@judyju ~]# sed '2i100imjudy\n101imjudy' test.txt
r #在檔案中讀內容
[root@judyju ~]# sed '2r r.txt' test.txt-->將r.txt中的檔案讀取出來,放在test.txt檔案中的第2行的後面
w #將指定行寫入檔案
[root@judyju ~]# sed '3w w.txt' test.txt-->讀取test.txt第3行,將這第3行寫入w.txt-->如果沒有w.txt 會自動建立
y #將字元轉換成另一個字元 
[root@judyju ~]# sed 2y/xi/ia/ test.txt
⚠️y編輯模式是單個字元改變的,就是將第2行的x變成i,將第2行的i變成x
s #將字串轉換成另一個字串
[root@judyju ~]# sed 's/hh/gg/' test.txt
g #全域性執行
[root@judyju ~]# sed 's/hh/gg/g' test.txt
i #忽略大小寫(跟s模式一起用)
[root@judyju ~]# sed 's/Hh/gg/gi' test.txt
& 代表前面匹配到的內容

案例

1、將nginx.conf中的註釋行全部去掉
[root@judyju ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
2、將nginx.conf的每一行都加註釋
sed 's/.*/#&/g' /etc/nginx/nginx.conf
[root@judyju ~]# sed 's/^.*/#/g' /etc/nginx/nginx.conf
3、要求一鍵修改本機ip
[root@judyju ~]# sed 's/\.100/\.101/g' /etc/sysconfig/network-scripts//ifcfg-eth[01]