自學Linux Shell18.1-sed編輯器基礎特性

點擊返回 自學Linux命令行與Shell腳本之路html

18.1-sed編輯器基礎特性

linux世界中最普遍使用的兩個命令行編輯器:linux

  • sed
  • gawk

1. sed概念

sed是stream editor的簡稱,也就是流編輯器。sed 是一種在線編輯器,它一次處理一行內容。sed是非交互式的編輯器。它不會修改文件,除非使用shell重定向來保存結果。默認狀況下,全部的輸出行都被打印到屏幕上。正則表達式

sed編輯器會執行如下操做:shell

  1. 一次從輸入中讀取一行數據。
  2. 根據所提供的編輯器命令匹配數據。
  3. 按照命令修改流中的數據。
  4. 將新的數據輸出到STDOUT。

          在流編輯器將全部命令和一行數據匹配完畢後,它會讀取下一行數據重複這個過程。緩存

解析:編輯器

首先sed把當前正在處理的行保存在一個臨時緩存區中(也稱爲模式空間),而後處理臨時緩衝區中的行,完成後把該行發送到屏幕上。sed每處理完一行就將其從臨時緩衝區刪除,而後將下一行讀入,進行處理和顯示。處理完輸入文件的最後一行後,sed便結束運行。spa

2. sed命令格式

1 sed OPTIONS... <SCRIPT> [INPUTFILE...]
  • -n 使用安靜(silent)模式(想不通爲何不是-s)。在通常sed的用法中,全部來自stdin的內容通常都會被列出到屏幕上。但若是加上-n參數後,則只有通過sed特殊處理的那一行(或者動做)纔會被列出來;
  • -e 直接在指令列模式上進行 sed 的動做編輯;
  • -f 直接將 sed 的動做寫在一個文件內, -f filename 則能夠執行filename內的sed命令;
  • -r 讓sed命令支持擴展的正則表達式(默認是基礎正則表達式);
  • -i 直接修改讀取的文件內容,而不是由屏幕輸出。

2.1 在命令行定義sed編輯器命令

sed中y命令與s命令的區別命令行

  • y通常是行級別的替換,s通常是列級別替換(固然也能夠轉換成行級)
  • s替換的是總體,y替換的是每一字母對應的單個字母, 會用斜線間的第二個文本字符串來替換第一個文本字符串

2.2 在命令行使用多個sed編輯器命令

  • 在命令行使用多個sed編輯器命令,就須要使用 -e 選項
  • 同時使用多個編輯命令,命令之間要用;隔開(!除外),而且在命令末尾和分號以前不能有空格
  • 也可使用次提示符來分割命令

 

2.3 在文件中讀取sed編輯器命令

 在sed命令中用 -f 選項來制定文件。這種狀況下,不用在每條命令後面放一個分號。3d

 

3. sed編輯器基礎 

3.1 更多的替換選項

S命令:行中替換文本,替換的是總體,默認狀況下只替換沒行中出現的第一處 code

   s/原文本/新文本/標記位 ,   標記爲以下:

  •   p  :顯示替換成功的行    
  •   g  :全局替換
  •   w  filename : 將替換成功的結果保存至指定文件中
  • 數字: 標明新文本將替換第幾處模式匹配的地方

3.2  使用地址

若是隻想將命令做用在特定行貨某些行,就必須使用 行尋址 。

在sed編輯器中有兩種形式的行尋址:

  • 以數字形式表示行區間
  • 用文本模式來過濾行

 指定的格式一:

1 [address] command

 指定的格式二(多個命令組):

1 address] {
2    command1
3    command2
4    command3
5    ....
6 }

3.2.1 數字方式的行尋址

使用數字方式的行尋址,能夠用行的文本流中的行位置來引用。

  • 在命令中指定的地址可使單個行號,或是用起始行號、逗號以及結尾行號指定的一個區間範圍內的行
  • 可使用行地址區間
  • 可使用 $ 符號,將命令做用到文本中從某行開始的全部行。

3.2.2  使用文本模式過濾器

格式:  /pattern/command 

  • 必須使用/將要指定的pattern封起來
  • 會將該命令做用到包含指定文本模式的行上。

3.2.3   命令組合

  •  若是須要在單行上執行多條命令,可使用花括號將多條命令組合在一塊兒
  • 也能夠在一組命令前指定一個地址區間

 

3.3  刪除行 d命令

以前講的都是替換命令s , 其實還有不少其餘命令。

刪除命令d ,會刪除匹配指定尋址模式的全部行。

  • 若沒有添加尋址模式,全部文本行都會被刪除
  • 經過行號指定或區間指定或特殊符號&,能夠刪除特定的文本行
  • sed編輯器的模式匹配也適用於刪除命令
  • 重點: 沒有刪除原文本 

 

3.4  插入和附件文本

  • 插入命令 i 會在指定行前增長一個新行, 文本會出如今數據流文本的前面。
  • 附加命令 a 會在指定行後增長一個新行, 文本會出如今數據流文本的後面。  
  • 他們不能再單個命令行上使用,必須指定是要將行插入仍是附加到另外一行
  • 經過行號指定或區間指定或特殊符號&,能夠插入或附加特定的文本行
  • $a\ 能夠直接附件在文本最後一行
  • 要插入或附加多行文本,必需要插入或附加的新文本的每一行使用反斜線
  • sed編輯器的模式匹配也適用

格式 :

1 sed  '[address] command\
2 new line '

 

 

3.5 修改行

  • 修改行命令 c 修改數據流中整行文本的內容
  • 他們不能再單個命令行上使用,必須指定是要將行插入仍是附加到另外一行
  • 在使用行號區間指定時,須要注意是用這一行文本替換數據流中的兩行文本,而不是逐一修改這兩行文本。
  • sed編輯器的模式匹配也適用

 

3.6 轉換行

轉換命令 y 是惟一能夠處理單個字符的sed編輯器命令。

格式:

1 [address]y/inchars/outchars/
  • inchars和outchars 值一對一映射
  • inchars中的第一字符會被轉換成outchars的第一字符;inchars中的第二字符會被轉換成outchars的第二字符;以此列推
  • 若是inchars 和outchars的字符長度不符,就會報錯
  • y命令不是全部系統的sed編輯器都存在的 

3.7 打印數據流中的信息

  • p命令用來打印文本行, 通常與sed -n 組合使用
  • = 命令用來打印行號
  • l 命令用來列出行

 

3.8 使用sed處理文件

  •  w 命令用來向文件寫入行。
  •  r 命令容許將一個獨立文件中的數據插入到數據流中

相關文章
相關標籤/搜索