sed 筆記

sed是一個非交互式文本編輯器,他能夠對文本文件和標準輸入進行編輯,標準輸入能夠是來自鍵盤,文件重定向,字符串,變量甚至來自於管道的文本。sed適用於如下三種場合:linux

  • 編輯相對交互式文本編輯器而言太大的文件。
  • 編輯命令太複雜,在交互式文本編輯器中難以輸入的狀況。
  • 對文件掃描一遍,可是須要執行多個編輯函數的狀況

調用sed有三種方式,一種爲she'll命令行方式,另外兩種是將sed命令寫入腳本,而後執行該腳本文件。三種方式概括以下:正則表達式

  • shell命令行輸入命令調用sed,格式爲:
  1. sed [選項] 'sed命令' 輸入文件
  • 將sed命令插入腳本文件後,經過sed命令調用它,格式爲:
  • sed [選項] -f sed腳本文件 輸入文件
  • 將sed命令插入腳本後,最經常使用的方法是將該腳本設置爲可執行文件,而後直接執行該腳本,格式爲:
  1. ./sed腳本文件 輸入文件

sed命令選項及意義:shell

選項 意義
-n 不打印全部行到標準輸出
-e 表示將下一個字符串解析爲sed編輯命令,若是隻傳遞一個編輯命令給sed,-e選項能夠省略
-f 表示正在調用sed腳本文件

sed一般由定位文本行和sed編輯命令兩部分組成,sed提供如下兩種方式定位文本:編輯器

  1. 使用行號,指定一行或者行號範圍
  2. 使用正則表達式

下表是sed定位文本的方法函數

選項 意義
x x爲指定行號
x,y 指定從x到y的行號範圍
/patten/ 查詢包含模式的行
/pattern/pattern/ 查詢包含兩個模式的行
/pattern/,x 從與pattern匹配的行到x行號之間的行
x,/pattern/ 從x號行到與pattern匹配行之間的行
x,y! 查詢不包括x,y行號的行

下面將在示例中說明sed的命令選項的意義,新建一個名爲sedtest的文件,內容以下:(測試過程當中可能會有修改)測試

this is a test file for sed
Test is real important
what i want to say is: haha nobody is god except allah.
This is very IMPORTYANT what you want to say is:goodbye! where to go? I don't know! this cool!
  •  -n選項
#第一條命令,帶-n選項,只打印第一行
[root@linuxTest ~]# sed -n '1p' sedtest 
this is a test file for sed
#第二條命令,不帶-n,不只打印第一行,還打印輸入文件的所有內容
[root@linuxTest ~]# sed '1p' sedtest 
this is a test file for sed
this is a test file for sed
Test is real important
what i want to say is: haha
nobody is god except allah.
This is very IMPORTYANT

  #打印行範圍this

  root@linuxTest ~]# sed -n '2,6p' sedtest
  Test is real important
  what i want to say is: hahaspa

 
 

  nobody is god except allah.
  This is very IMPORTYANT命令行

 
  • -e選項
#sed編輯命令「=」用來匹配is關鍵字的行號,若是但願行號和行內容都打印出來,則須要傳遞p和=兩個編輯命令
[root@linuxTest ~]# sed -n -e '/is/=' -e '/is/p' sedtest 
1
this is a test file for sed
2
Test is real important
3
what i want to say is: haha
5

-s選項code

#使用替換模式替換相應模式
#p選項,只替換每行第一個符合條件的文本
[root@linuxTest ~]# sed -n 's/is/IS/p' sedtest 
thIS is a test file for sed
Test IS real important
what i want to say IS: haha
nobody IS god except allah.
ThIS is very IMPORTYANT
what you want to say IS:goodbye!
thIS cool!
#2p,若是每行含有兩個及兩個以上目標文本,則只替換每行第二個符合條件的文本
[root@linuxTest ~]# sed -n 's/is/IS/2p' sedtest 
this IS a test file for sed
This IS very IMPORTYANT
#pg,若是該行中含有目標文本,則不論幾個都替換。
[root@linuxTest ~]# sed -n 's/is/IS/pg' sedtest 
thIS IS a test file for sed
Test IS real important
what i want to say IS: haha
nobody IS god except allah.
ThIS IS very IMPORTYANT
what you want to say IS:goodbye!
thIS cool!#w,替換後,保存文本到另一個文件[root@linuxTest ~]# sed -n 's/is/IS/gw output' sedtest 
相關文章
相關標籤/搜索