1. 程式人生 > 其它 >Linux sed 命令

Linux sed 命令

Linux sed 命令

Linux sed 命令是利用指令碼來處理文字檔案

sed 可以找指令碼的指令來處理,編輯文字檔案

sed 主要用來自動編輯一個或多個檔案,簡化對檔案的反覆操作,編寫程式等

# 語法
sed [-hnV][-e<script>][-f<script檔案>][文字檔案]

# 引數說明
 -e<script> 或 --expression=<script> 以選項中指定的script來處理輸入的文字檔案
 -f<script> 或 --file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案
 -h 或 --help 顯示幫助
 -n 或 --quiet 或 --silent 僅顯示script處理後的結果
 -V 或 --version 顯示版本資訊
    
# 動作說明
a : 新增, a的後面可以接字串,這些字串 將出現在新一行(當前行的下一行)
c : 取代, c的後面可以接字串,這些字串可以取代 n1,n2之間的行
d : 刪除, 因為是刪除,d後面通常不跟任何內容
i : 插入, i的後面可以接字串 , 這些字串 將出現在新一行(當前行的上一行)
p : 列印, 選擇某個資料印出
s : 取代, 可以直接進行取代工作. 通常s懂可以搭配正則表示式,如 : 20s/old/new/g 
        
        
#### 務必以 '' 兩個單引號括住

a

# 追加行

$ sed -e 4a\newline testfile #使用sed 在第四行後新增新字串  

HELLO LINUX! #testfile檔案原有的內容  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test  
newline 


以行為單位的新增/刪除

$ nl testfile 
     1	HELLO LINUX!  
     2	Linux is a free unix-type opterating system.  
     3	This is a lin

# d 刪除指定的行號
$ nl testfile  | sed '2,3d'
     1	HELLO LINUX!  
     4	Linux test 

# 刪除 第二行
$ nl testfile | sed '2d' 

# 刪除第三行到最後一行
$ nl testfile | sed '3,$d' 



#  a 追加內容第二行後 追加內容
$ nl testfile |sed '2a drink tea'
     1	HELLO LINUX!  
     2	Linux is a free unix-type opterating system.  
drink tea
     3	This is a linux testfile!  
     4	Linux test 
     
     
# i 插入內容第二行前
$ nl testfile |sed '2i drink tea'
     1	HELLO LINUX!  
drink tea
     2	Linux is a free unix-type opterating system.  
     3	This is a linux testfile!  
     4	Linux test 

# 增加兩行以上的內容
$ nl testfile | sed '2a Drink tea or ......\
> drink beer ?'

     1	HELLO LINUX!  
     2	Linux is a free unix-type opterating system.  
Drink tea or ......
> drink beer ?
     3	This is a linux testfile!  
     4	Linux test 

以行為單位的替換與顯示

#  c 整行取代  2-3行替換成 : no 2-3 numbe
$ nl testfile |sed '2,3c no 2-3 number'
     1	HELLO LINUX!  
no 2-3 number
     4	Linux test 

# 僅列出 指定行號的內容
$ nl testfile |sed -n '2,3p'
     2	Linux is a free unix-type opterating system.  
     3	This is a linux testfile! 


資料的搜尋並顯示

# 搜尋 有 test關鍵字的行,重複出現
# p 列印
$ nl testfile | sed '/test/p'
     1	HELLO LINUX!  
     2	Linux is a free unix-type opterating system.  
     3	This is a linux testfile!  
     3	This is a linux testfile!  
     4	Linux test 
     4	Linux test 

# -n 只展示結果
$ nl testfile | sed -n '/test/p'
    3	This is a linux testfile!  
    4	Linux test 

資料的搜尋並刪除

# d 刪除 符合條件的行
$ nl testfile | sed  '/test/d'
     1	HELLO LINUX!  
     2	Linux is a free unix-type opterating system.  

資料的搜尋並執行命令

# 執行後面花括號中的一組命令,每個命令之間用分號分隔,這裡把bash替換為blueshell,再輸出這行

$ nl testfile |sed -n '/test/{s/linux/Centos/;p;q}'
     3	This is a Centos testfile!  

資料的搜尋並替換

# sed 's/要被取代的字串/新的字串/g'
     
#   利用 /sbin/ifconfig 查詢 IP , 將 IP 前面的部分予以刪除
 $ /sbin/ifconfig  ens33 |grep 'inet'|sed 's/^.*://g'
 inet 192.168.236.128  netmask 255.255.255.0  broadcast 192.168.236.255

# 刪除後續的部分
 $ /sbin/ifconfig  ens33 |grep 'inet'|sed 's/^.*://g' | sed 's/netmask.*$//g'
        inet 192.168.236.128  

多點編輯

$ nl testfile  |sed -e '3,$d' 
     1	HELLO LINUX!  
     2	Linux is a free unix-type opterating system.  
     
$  nl testfile  |sed -e '3,$d' -e 's/free/fzzz/' 
     1	HELLO LINUX!  
     2	Linux is a fzzz unix-type opterating system.  
     
# -e表示多點編輯,第一個編輯命令刪除testfile第三行到末尾的資料,第二條命令搜尋free替換為fzzz。

直接修改檔案內容(危險動作)

# 利用 sed 將 regular_express.txt 內每一行結尾若為 . 則換成 !
$ sed -i 's/\.$/\!/g' regular_express.txt

#  regular_express.txt 最後一行加入 # This is a test:
$ sed -i '$a # This is a test' regular_express.txt

https://www.runoob.com/linux/linux-comm-sed.html