sed編輯器被稱作流編輯器(stream editor)。流編輯器在處理數據之前基于預先提供的一組規則來編輯數據流。
一、命令格式
sed options '"地址""編輯命令"' file
常用選項:
-n:靜默模式,不顯示模式內容空間中的內容;
-r:支持使用擴展正則表達式;
-i:修改原文件;
-e:執行多個命令;
-f file:將file中指定的命令添加到運行的命令中;
常用編輯命令:
p:打??;
s:文本替換;
d:刪除;
i text:行上方插入,text即為插入的內容;
a test:行下方插入,使用\n插入多行內容;
c:修改行內容;
r path/from/file:在指定位置合并兩個文件;
w path/to/somefile:把符合條件的行保存至指定的文件中;
二、應用實例
1、替換文本
上例中將/etc/issue文件中的字符“e”替換為數據“8”,但其結果只替換了每行的第一個匹配字符,可以使用替換標記來完成替換所有匹配字符的工作。
1.1 替換標記
格式:s/pattern/replacement/flags
替換標記(flags):
數字:表明新文本將替換第幾處模式匹配的地方;
g:表明新文體將替換所有模式匹配的地方;
p:原來行的內容要打印出來;
w file:將替換結果寫到文件中。
替換第二個匹配的內容:
替換所有匹配的內容:
只顯示被替換過內容的行,通常與-n選項一起使用:
將替換的內容輸出到文件中:
1.2 字符串分隔符
在使用進行替換操作時,通常我們習慣使用"/"符號作為分隔符,如查"/"符號需要在模式中用到的話則需在使用"\"來進行轉義,如下所示:
sed 's/\/tmp/\/dev' /tmp/test
上面的表達式看起來不容易閱讀,可以通過修改字符串分隔符來解決此問題:
sed 's%/tmp%/dev' /tmp/test
上面的表達式使用"%"來作為字符串分隔符,依然可以達到替換效果。
注:字符串分隔符可以使用任意字符來替換。
2、地址
sed編輯器中可以使用指定地址的方式來過濾想要進行操作的作。
兩種行尋址的形式:
1、行的數字范圍
2、文本模式過濾
格式:[address]command
2.1 數字方式
上例中只是在s命令前添加地址3,作用是將第3行的“:”全部替換為“,”。
上例中指定了一個地址范圍3到5行。
上例中使用了"$"符號,表示將第3行至最后一行的所有“:”全部替換成為“,”。
2.2 文本模式
格式:/pattern/command
模式必須使用"/"括起來。
上例中只替換了有Kernel存在的行。
2.3 多命令
sed編輯器還支持多個命令同時執行。
上例中對于有Kernel的行同時進行了兩個地方的替換。
3、刪除
刪除命令d會將文本中的內容真的刪除掉,只是在sed編輯器輸出時會被刪除掉。
4、插入和追加文本
插入命令i會在指定行的行前增加一個新行;
追加命令a會在指定行的行后增加一個新行。
格式:[地址]a/i 插入的內容
5、修改行
工作機制與插入和追加相同,格式也一樣。
將/etc/issue文件的第一行修改為指定內容。
6、將替換結果寫到文件
格式:[address]w filename
7、從文件中讀取數據
格式:[address]r filename
將test文件中的內容插入到/etc/issue文件中。
8、常用選項實例
使用-e選項同時執行多個命令。
使用文件中的命令來執行替換操作。
原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/10590