Linux sed 命令總結

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能夠是任意字符

5addr1add2
定址 addr1add2 決定用於對哪些行進行編輯。地址的形式能夠是數字、正則表達式或兩者的結合。若是沒有指定地址, sed 將處理輸入文件中的全部行。若是定址是一個數字,則這個數字表明行號,若是是逗號分隔的兩個行號,那麼須要處理的定址就是兩行之間的範圍(包括兩行在內)。範圍能夠是數字,正則或兩者組合。

6addr1+N

addr1 這行到往下 N 行匹配,總共匹配 N+1

 

4、Sed的正則表達式

                               表 1sed 的正則表達式元字符

元字符 功 能 示 例 示例的匹配對象
^ 行首定位符 /^love/ 匹配全部以 love 開頭的行
$ 行尾定位符 /love$/ 匹配全部以 love 結尾的行
. 匹配除換行外的單
個字符
/l..e/ 匹配包含字符 l、後跟兩個任意
字符、再跟字母 e 的行
* 匹配零個或多個前
導字符
/*love/ 匹配在零個或多個空格緊跟着
模式 love 的行
[] 匹配指定字符組內
任一字符
/[Ll]ove/ 匹配包含 love Love 的行
[^] 匹配不在指定字符
組內任一字符
/[^A-KM-Z]ove/ 匹配包含 ove,但 ove 以前的那
個字符不在 A K M Z
的行
\(..\) 保存已匹配的字符
& 保存查找串以便在
替換串中引用
s/love/**&**/ 符號&表明查找串。字符串 love
將替換先後各加了兩個**的引
用,即 love 變成**love**
\< 詞首定位符 /\<love/ 匹配包含以 love 開頭的單詞的
\> 詞尾定位符 /love\>/ 匹配包含以 love 結尾的單詞的
x\{m\} 連續 m x /o\{5\}/ 分別匹配出現連續 5 個字母 o
至少 5 個連續的 o、或 5~10
連續的 o 的行
x\{m,\} 至少 m x /o\{5,\}/
x\{m,n\} 至少 m x,但不
超過 n x
/o\{5,10\}/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 表 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 把全部輸入行都打印在標準輸出上。若是在某一行匹配到 northsed就把該行另外打印一遍(如紅色標記)。 

[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
相關文章
相關標籤/搜索