Linux三劍客命令—sed


一、概念說明

官方概念說明:

stream editor for filtering and transforming text
字符流過濾編輯和文本字符流轉換工具

Linux sed 命令是利用腳本來處理文本文件。

sed 可依照腳本的指令來處理、編輯文本文件。

Sed 主要用來自動編輯一個或多個文件、簡化對文件的反復操作、編寫轉換程序等。

二、sed功能作用說明

  • 處理文件信息

    • 文本文件信息(小文件)
    • 日志文件信息
    • 配置文件信息
  • 處理文件方式

    • 增加信息
    • 刪除信息
    • 修改信息
    • 查找信息

三、sed語法原理

3.1 命令語法格式

標准格式:

sed [選項] [sed指令] [文件信息]
sed [參數] '處理規則' [操作對象]
...
相關參數 參數說明
-e 允許多項編輯
-n 取消默認輸出
-i 就地編輯
-r 支持拓展正則
-f 指定sed匹配規則腳本

舉例說明:

sed -i 's#oldboy#oldgirl#g' oldboy.txt

命令參數: -i
命令指令: s
指令修飾: g

相同指令信息只能使用一次,想使用多次需要加上分號

sed四種定位模式如下:

1、數字定位法
eg:指定行號
	sed '3d' [文件信息] 
	sed '2,3d' [文件信息] 

2、正則定位法
eg:指定正則定位
	sed '/^g/d' [文件信息]
		
3、數字和正則定位法
	sed '3,/^g/d' [文件信息]
	
4、正則和正則定位法
	sed '/^g/,/^j/d' [文件信息] 

sed的編輯模式指令匯總如下:

d :刪除
p :打印
a : 在當前行后添加一行或多行
	sed '2axxx' [文件信息] 
c :用新文本修改(替換)當前行
	sed '2cxxx' [文件信息]
i : 在當前行之前,插入文本(單獨使用時)
	sed '2ixxx' [文件信息]
r : 在文件中讀內容
	sed '2r r.txt' [文件信息] 
w : 將指定行寫入文件
	sed '2w w.txt' [文件信息] 
y : 將字符轉換成另一個字符
	sed '2y/fa/FA/' [文件信息] 
s : 將字符串轉換成另一個字符串(每一行只替換一次)
	sed 's/11/22/' [文件信息] 
g : 全部執行
	sed 's/11/22/g' [文件信息] 
i : 忽略大小寫(跟 s 模式一起使用時)
& :代表前面匹配到的內容

3.2 命令執行過程

image

四、sed實踐操作

4.1 實踐環境搭建

cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF

4.2 命令操作實踐

  1. 查詢實踐

    • 單行查找

      打印模式空間內容:p
      
      取消默認輸出信息:-n
      

      最終命令執行信息:

      按照行號查找: sed -n '1p' person.txt
      
      按照信息查找: sed -n '/oldboy/p' person.txt
      
    • 多行查找

      按照連續的多行查找:

      按照行號查找: sed -n '1,3p' person.txt
      按照信息查找: sed -n '/oldboy/,/yy/p' person.txt
      

      按照不連續的多行查找:

      按照行號查找: sed -n '1p;3p' person.txt
      按照信息查找: 
      	sed -nr '/101|103|104/p' person.txt 
      	sed -n '/101/p;/104/p' person.txt  
      
  2. 增加實踐

    • 按照行號增加

      文件追加信息指令(行后): a---append
      
      文件插入信息指令(行前): i---insert
      

      最終命令執行信息:

      sed '$a106\n107'  person.txt 
      
      sed '2a106\n107'  person.txt 
      
    • 按照信息增加

      sed '/oldboy/a106\n107'  person.txt 
      
  3. 刪除實踐

    • 單行刪除

      刪除文件信息指令: d---delete
      				 i---input
      

      sed -i.bak:-i參數必須寫在所有參數最后面

      最終命令執行信息:

      按照行號刪除: sed '1d' person.txt
      按照信息刪除: sed  '/oldboy/d' person.txt
      

      刪除文件空行信息:

      sed '/^$/d' person.txt
      
      sed -n '/^$/!p' person.txt
      
    • 多行刪除

      按照行號刪除: sed '1,3d' person.txt
      按照信息刪除: sed  '/oldboy/,/yy/d' person.txt
      
  4. 替換實踐

    • 文本替換

      編輯文件信息參數: i
      替換文件信息指令: s c
      按行進行信息替換: g    (否則只替換每行匹配的第一個信息)
      

      最終命令執行信息:

      替換文件信息: sed -i.bak 's#oldboy#oldgirl#g' person.txt
      
    • 反向引用

      擴展正則識別參數: -r
      調用正則匹配信息: &
      

      最終命令執行信息:

      替換文件信息:
      sed -r 's#(.*)#<\1>#g' person.txt
      
      sed -r 's#.*#<&>#g' person.txt
      
      echo 123456|sed -r 's#[1-6]{1}#<&>#g'
      echo 123456|sed -r 's#.#<&>#g'
      
    • 相關案例

      1、將nginx.conf中的注釋行全部去掉
      	[root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
      
      2、將nginx.conf中每一行之前增加注釋
      	[root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf
      
      3、要求一鍵修改本機的ip,
      	192.168.15.100 ---> 192.168.15.101
      	172.16.1.100   ---> 172.16.1.101
      	sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
      	
      4、將/etc/passwd中的root修改成ROOT
      	sed -i 's#root#ROOT#g' /etc/passwd
      
  5. 拓展實踐

    修飾指定信息取反: sed -n '/^$/!p' person.txt
    
    取出文件行號信息: sed '=' person.txt
    
    執行多個相同指令: sed -n '1p;3p;5p' person.txt
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM