1. 程式人生 > >linux 中sed的用法詳解

linux 中sed的用法詳解

sed 是操作,過濾和轉換文字內容的強大工具,sed可以從檔案和管道中讀取輸入。

sed 命令語法 sed [ option ] {sed -commands} {input -file} -e :執行多個sed命令 -n :只顯示操作行 -i :修改目標檔案內容 sed每次都從目標檔案讀取一行記錄,並在該記錄上執行sed -commands 命令 直到最後一行結束

p 列印命令

命令p 可以控制只輸出你指定的內容 通常使用p時,還需要使用-n選項來遮蔽sed 的預設輸出 ,否則當執行命令p時,每行記錄會輸出兩次。

地址範圍 可用~ 如 n~m 表示從第 n 行開始,每次 跳過 m 行: 1~2 匹配 1,3,5,7,…… 2~2 匹配 2,4,6,8,…… 1~3 匹配 1,4,7,10,…… 2~3 匹配 2,5,8,11,……

sed -n  ‘p’  filename   #列印所有行
sed  -n  ‘2p’  filename    #列印第二行
sed   -n   ‘1,4p’ filename   #列印1-4行 
sed   -n  ‘2,$’ filename    #列印
sed -n  ‘2~3 p’  filename    #列印2,5,8,11 等行
sed  -n  ‘/jam/p’ filename   #列印匹配到jam的所有行
  sed  -n  ‘/jam/,4 p’ filename   #列印第一次匹配jam的行至第四行的內容
  sed  -n  ‘/jam/,$ p’ filename    #列印第一次匹配到jam的行到最後所有行
  sed  -n  ‘/jam/,/wa/ p’   filename   #列印匹配jam的行開始到jane的行之間的所有內容

**d 刪除 命令 ** 注意 :不加 i 引數 ,原始檔內容不變。

sed  ‘2d’  filename   #刪除第二行
sed   ‘1,4d’  filename  #刪除1到4行
sed   ‘2,$d’  filename   #刪除第二行到最後一行
sed   ‘1~2 d’  filename    #刪除奇數行
sed    ‘/amn/d’ filename    #刪除匹配amn 的行
sed   ‘/amn/,4 d’ filen	   #刪除匹配jason的行至第四行
sed   ‘/ar/,$ d’ filename  #刪除第一次匹配到ar的行到最後一行
sed   ‘/ar/,+2 d’ filename #刪除第一次匹配到ar的行和緊跟它後面的兩行
sed   ‘/^$/d’ filename    #刪除空行

w 寫入命令

命令w 可以把一個檔案內容儲存到另一個檔案當中

sed  ‘w   1.txt’         2.txt        #把2.txt的內容儲存到1.txt  同時顯示在螢幕上若1.txt 檔案中有內容 ,則會覆蓋
sed  -n    ‘w   1.txt’   2.txt        #同上功能 只是不再螢幕上顯示
 sed -n    ‘2w   1.txt’  2.txt        #只儲存第二行
 sed -n    ‘1,4w   1.txt’   2.txt    #只儲存1到4行
 sed  -n   ‘2,$w   1.txt’   2.txt    #儲存第二行至最後一行
 sed  -n   ‘1~2 w   1.txt’   2.txt    #儲存奇數行
sed  -n   ‘/jame/w   1.txt’   2.txt   #儲存匹配到jame的行
 sed  -n   ‘/jasm/,4 w   1.txt’   2.txt   #儲存第一次匹配jasm的行至第四行
  sed  -n   ‘/sxd/,/ddd/ w   1.txt’   2.txt  #儲存匹配sxd至匹配ddd 的行
                    

**S 替換命令 **

sed  ‘s/ddd/sxd/’   filename     #用sxd替換檔案中每行當中第一個ddd
sed  ‘/ddd/s/sxd/vvv/’   filename  #用vvv替換包含ddd中行中第一個sxd
 
**g 全域性標記 **
sed  ‘s/ddd/sxd/g’   filename   #用sxd替換含有ddd的所有行中所有的ddd

**1 2 3 數字標記 **
sed  ‘s/ddd/sxd/2’   filename   #替換第二個ddd

p 列印標記

sed   -n  ‘s/sxd/ddd/p’  filename  #列印替換後的行
sed    -n  ‘s/sxd/ddd/2 p’  filename  #把每行中第二次出現sxd替換為ddd打印出來

w 寫標記

sed -n 's/John/Johnny/w output.txt' employee.txt    #將替換後的內容寫到 outout。txt 中

i 忽略大小寫

sed 's/john/Johnny/i' employee.txt   #把 john 或 John 替換為 Johnny

&的作用

 sed 's/^[0-9][0-9][0-9]/[&]/g' employee.txt   #給僱員 ID(即第一列的 3 個數字)加上[ ],如 101 改成[101]
 sed 's/^.*/<&>/' employee.txt               #把每一行放進< >中

正則表示式

sed -n '/^103/ p' employee.tx     #匹配103開頭的行並列印
 sed -n '/r$/ p' employee.txt      #匹配r結尾的行並列印
 
  匹配0到任意多次(*)
  sed -n '/log: *./p' log.txt         #匹配包含log並且log後面有資訊的行
  
  匹配1到多次 (\+)
  sed -n '/log: \+/ p' log.txt       #匹配log後面有一個或者多個空格的行
  
  匹配0次或者1次 前面的字元
  sed -n '/log: \?/ p' log.txt        #匹配log後面沒有空格或者有一個空格的行
  
  轉義字元 ( \ )
 sed -n '/127\.0\.0\.1/ p' /etc/host   #匹配含有127.0.0.1的行並列印
 
 字符集 ( [0-9] ) 
 sed  -n  ‘/[123]/ p'    filename   #匹配含有1或2或3的行 並列印

 

a 追加命令

 sed '2 a 203 ' employee.txt    #在第二行加入203
  sed '$ a 203' employee.txt    #在結尾加入203
  sed  ‘/sxd/ a 123’  filename    #在匹配到sxd的行後加入123
  

i 插入命令

和追加命令a 用法一樣,只是在前一行插入

c 修改命令

sed '2 c 202' employee.txt          #用202替代第二行