1、sed格式命令正則表達式
sed 命令行格式爲:sed [選項] 'command' 輸入文本
2、sed命令的選項緩存
sed [選項] [動做] 選項與參數: -n :使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN 的數據通常都會被列出到終端上。但若是加上 -n 參數後,則只有通過sed 特殊處理的那一行(或者動做)纔會被列出來。 -e :直接在命令列模式上進行 sed 的動做編輯; -f :直接將 sed 的動做寫在一個文件內, -f filename 則能夠運行 filename 內的 sed 動做; -r :sed 的動做支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法) -i :直接修改讀取的文件內容,而不是輸出到終端。
功能說明: a :新增行, a 的後面能夠是字串,而這些字串會在新的一行出現(目前的下一行) c :取代行, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行 d :刪除行,由於是刪除,因此 d 後面一般不接任何參數,直接刪除地址表示的行; i :插入行, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行); p :列印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運行 s :替換,能夠直接進行替換的工做,一般這個 s 的動做能夠搭配正規表示法,例如 1,20s/old/new/g 通常是替換符合條件的字符串而不是整行 通常function的前面會有一個地址的限制,例如 [地址]function,表示咱們的動做要操做的行。下面咱們經過具體的例子直觀的看看sed的使用方法。
3、Sed定位sass
Sed命令在沒有給定的位置時,默認會處理全部行;spa
Sed支持如下幾種地址類型:命令行
一、first ---- step3d
這兩個單詞的意思:first 指起始匹配行,step指步長,例如:sed -n 2~5p 含義:從第二行開始匹配,隔5行匹配一次,即2,7,12.。。。。code
二、$對象
這個$符表示匹配最後一行。blog
三、/REGEXP/ci
這個是表示正則那一行,經過//之間的正則來匹配
四、\cREGEXPc
這個是表示匹配正則那一行,經過\c和c之間的正則來匹配,c能夠是任意字符
5、 addr1, add2
定址 addr1, add2 決定用於對哪些行進行編輯。地址的形式能夠是數字、正則表達式或兩者的結合。若是沒有指定地址, sed 將處理輸入文件中的全部行。若是定址是一個數字,則這個數字表明行號,若是是逗號分隔的兩個行號,那麼須要處理的定址就是兩行之間的範圍(包括兩行在內)。範圍能夠是數字,正則或兩者組合。
6、 addr1, +N
從 addr1 這行到往下 N 行匹配,總共匹配 N+1 行
4、Sed的正則表達式
表 1: sed 的正則表達式元字符
|
表 2.sed 的經常使用選項
選項 | 說明 |
-n | 使用安靜模式,在通常狀況全部的 STDIN 都會輸出到屏幕上,加入-n 後只打印 被 sed 特殊處理的行 |
-e | 多重編輯,且命令順序會影響結果 |
-f | 指定一個 sed 腳本文件到命令行執行, |
-r | Sed 使用擴展正則 |
-i | 直接修改文檔讀取的內容,不在屏幕上輸出 |
5、Sed 操做命令
sed 操做命令告訴 sed 如何處理由地址指定的各輸入行。若是沒有指定地址, sed 就會處理輸入的全部的行。表 3.sed 命令
命 令 | 說 明 |
a\ | 在當前行後添加一行或多行 |
c\ | 用新文本修改(替換)當前行中的文本 |
d | 刪除行 |
i\ | 在當前行以前插入文本 |
h | 把模式空間裏的內容複製到暫存緩存區 |
H | 把模式空間裏的內容追加到暫存緩存區 |
g | 取出暫存緩衝區裏的內容,將其複製到模式空間,覆蓋該處原有內容 |
G | 取出暫存緩衝區裏的內容,將其複製到模式空間,追加在原有內容後面 |
l | 列出非打印字符 |
p | 打印行 |
n | 讀入下一輸入行,並從下一條命令而不是第一條命令開始處理 |
q | 結束或退出 sed |
r | 從文件中讀取輸入行 |
! | 對所選行意外的全部行應用命令 |
s | 用一個字符串替換另外一個 |
表 4.替換標誌
g | 在行內進行全局替換 |
p | 打印行 |
w | 將行寫入文件 |
x | 交換暫存緩衝區與模式空間的內容 |
y | 將字符轉換爲另外一字符(不能對正則表達式使用 y 命令) |
6、sed使用實例
數據準備 northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13
一、打印:p命令
命令p是打印命令,用於顯示模式緩存區的內容。默認狀況下,sed把輸入行打印在屏幕上,選項-n用於取消默認打印操做。當選項-n和命令p同時出現時,sed可打印選定的內容
案例一:當僅僅出現p打印命令時,sed 把全部輸入行都打印在標準輸出上。若是在某一行匹配到 north, sed就把該行另外打印一遍(如紅色標記)。
[root@master mnt]# sed '/north/p' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13 [root@master mnt]# sed -n '/north/p' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9
案例二:當p打印命令和n同時出現時
說明:默認狀況下, sed 打印當前緩存區中的輸入行。命令 p 指示 sed 將再次打印該行。選項-n 取消 sed 取消默認打印操做。選項-n 和命令配合使用,模式緩衝區內的輸入行,只被打印一次。若是不指定-n 選項, sed 就會像上例中那樣,打印出重複的行。若是指定了-n,則sed 只打印包含模式 north 的行。
[root@master mnt]# sed -n '/north/p' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9
二、刪除:d命令
命令d用於刪除輸入行。sed先將輸入行從文件複製到緩存區,而後對該行執行sed命令,最後將模式緩存區的內容顯示在屏幕上。若是發出的是命令d,當前模式緩存區的輸入行會被刪除,不被顯示。可是在文件中該行是沒有被刪除的。
案例三:
刪除第 3 行。默認狀況下,其他的行都被打印到屏幕上。
[root@master mnt]# sed '3d' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13
案例4:
刪除從第三行到最後一行內容,剩餘各行被打印。地址範圍是開始第 3 行,結束最後一行。
[root@master mnt]# sed '3,$d' sedTest.txt northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23
案例5:全部包含模式 north 的行都被動刪除,其他行被打印。
[root@master mnt]# sed '/north/d' sedTest.txt western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 central CT Ann Stephens 5.7 .94 5 13
三、替換:s命令
命令 s 是替換命令。替換和取代文件中的文本能夠經過 sed 中的 s 來實現, s 後包含在斜槓中的文本是正則表達式,後面跟着的是須要替換的文本。能夠經過 g 標誌對行進行全局替換
案例 6:
s 命令用於替換。命令末端的 g 表示在行內全局替換;也就是說若是每一行裏出現多個west,全部的 west 都會被替換爲 north。若是沒有 g 命令,則只將每一行的第一 west 替換爲 north。
[root@master mnt]# sed 's/west/north/g' sedTest.txt northnorth NW Charles Main 3.0 .98 3 34 northern WE Sharon Gray 5.3 .97 5 23 southnorth SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13
案例7:
:s 命令用於替換。選線-n 與命令行末尾的標誌 p 結合,告訴 sed 只打印發生替換的那些行;也就是說,若是隻有在行首找到 west 並替換成 north 時纔會打印此行。
[root@master mnt]# sed -n 's/^west/north/p' sedTest.txt northern WE Sharon Gray 5.3 .97 5 23