點擊返回 自學Linux命令行與Shell腳本之路html
18.1-sed編輯器基礎特性
linux世界中最普遍使用的兩個命令行編輯器:linux
1. sed概念
sed是stream editor的簡稱,也就是流編輯器。sed 是一種在線編輯器,它一次處理一行內容。sed是非交互式的編輯器。它不會修改文件,除非使用shell重定向來保存結果。默認狀況下,全部的輸出行都被打印到屏幕上。正則表達式
sed編輯器會執行如下操做:shell
- 一次從輸入中讀取一行數據。
- 根據所提供的編輯器命令匹配數據。
- 按照命令修改流中的數據。
- 將新的數據輸出到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] {
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 命令容許將一個獨立文件中的數據插入到數據流中

