sed(stream editor)
功能說明:利用script來處理文本文件。
語 法:sed [-hnV][-e<script>][-f<script文件>][文本文件]
補充說明:sed可依照script的指令,來處理、編輯文本文件。
參 數:
-e<script>或--expression=<script> 以選項中指定的script來處理輸入的文本文件。
-f<script文件>或--
file=<script文件> 以選項中指定的script文件來處理輸入的文本文件。
-h或--help 顯示幫助。
-n或--quiet或--silent 僅顯示script處理後的結果。
-V或--version 顯示版本信息。
舉 例:
它是文本處理中非常重要的工具。它能夠完美地匹配正則表達式使用,功能很強大。
sed -i 's/pattern/replace_string/' file
替換給定文本中的字符串
sed 's/pattern/replace_string/g' file
替換每一行匹配的字符串
sed 's/pattern/replace_string/ng' file
從第n處匹配開始替換
字符/在sed中作為定界符使用。我們可以像下面一樣使用任意的定界符:
sed 's@pattern@replace_string@g' file
sed 's|pattern|replace_string|g' file
sed 's:pattern:replace_string:g' file
1. 移除空行
空白行可以用正則表達試^$進行匹配
sed '/^$/d' file
2. 已匹配字符串標記&
&標記匹配樣式的字符串,能夠在替換字符串時使用已匹配的內容
[root@server1 ~]# echo this is an example | sed 's/\w\+/[&]/g'
[this] [is] [an] [example]
正則表達式\W\+匹配每個單詞,然後我們用[&]替換它。&對應於之前所匹配到的單詞
3. 子串匹配標記\1
&代表匹配給定樣式的字符串。但我們也可以匹配給定樣式的其中一部分。
[root@server1 ~]# echo this is test 9999 | sed 's/test \([0-9]\)/\1/'
this is 9999
這條命令將test 9999替換為9999.樣式中匹配到的子串是9999。\(pattern\)用於匹配子串。模式被包括在使用斜線轉移過過的()中。對於匹配到的第一個子串,對應的標記是\1,匹配到的第二個子串是\2,依次類推。
[root@server1 ~]# echo test 7777 | sed 's/\([a-z]\+\) \([0-9]\+\)/\2 \1/'
7777 test
([a-z]\+\)匹配第一個單詞,([0-9]\+\)匹配第二個單詞。\1和\2用來引用它們。這種引用被稱為向後引用(back referencing)。 在替換部分,它們的次序被更改為\2 \1,因此結果呈現出逆序的形式。
4. 引用
sed表達式通常用單引號來引用。不過也可以使用雙引號。雙引號會通過對表達式求值來對其進行擴展。如下
sed -i "s/127.0.0.1.*$/127.0.0.1 `hostname` localhost.localdomain localhost/g" /etc/hosts
sed [-nefr] [動作]
選項與參數:
-n :使用安靜(silent)模式。在一般sed的用法中,所有來自STDIN的數據一般都會被列出到屏幕上。但如果加上-n參數後,則只有經過sed特殊處理的那一行(或者動作)才會被列出來
-e :直接在指令列模式上進行sed 的動作編輯
-f :直接將 sed 的動作寫在一個檔案內,-f filename則可以執行filename內的sed 動作
-r :sed的動作支持的是延伸型正規表示法的用法(預設是基礎正規表示語法)
-i :直接修改讀取的檔案內容,而不是由屏幕輸出
動作說明:[n1[,n2]]function
n1, n2 :在 10 到 20 行之間進行操作
function 有底下這些東東:
a :新增,a的後面可以接字符串,而這些字符串會在新的一行出現(目前的下一行)
c :取代,c 的後面可以接字符串,這些字符串可以叏代 n1,n2之間的行!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何東東;
i :插入,i 的後面可以接字符串,而這些字符串會在新的一行出現(目前的上一行);
p :打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運作
s :取代,可以直接進行取代的工作,通常這個s的動作可以搭配正規表示法。例如 1,20s/old/new/g