Linux三劍客之sed/檔案處理命令
阿新 • • 發佈:2021-12-21
檔案處理命令
一、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]