概述
sed命令是一個面向字元流的非互動式編輯器,不允許使用者與它進行互動操作。sed是以行為單位處理文字內容的。在shell中,可以批量修改文字內容。
用法
sed [選項] [動作]
選項與引數:
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到終端上。但如果加上 -n 引數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
-e :直接在命令列模式上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 sed 動作;
-r :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i :直接修改讀取的檔案內容,而不是輸出到終端。
function:
a :新增行, a 的後面可以是字串,而這些字串會在新的一行出現(目前的下一行)
c :取代行, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行
d :刪除行,因為是刪除,所以 d 後面通常不接任何引數,直接刪除地址表示的行;
i :插入行, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行
s :替換,可以直接進行替換的工作,通常這個 s 的動作可以搭配正規表示法,例如 1,20s/old/new/g 一般是替換符合條件的字串而不是整行
示例
1、刪除行
sed `m,nd` test.xx
d是刪除的意思,刪除text.txt檔案的m到n行,若n是$,則刪除m及其後面所有行。
sed `/m/d` test.xx
正規表示式,刪除text.txt檔案的包含“m”的所有行,若是/^m/意思為刪除m開頭的行。
2、檢視某幾行
sed -n `1,4p` test.sh
檢視test.sh檔案1~4行
sed正則中的元字元
sed中的命令前面可以使用地址範圍進行限制,表示對檔案的某些符合條件的行執行相應的操作,其中我們可以使用正規表示式選出要操作的行,而sed中正則的語法可能與我們其他命令的正則語法有一些不同,這裡我們有必要列出sed中常用的正則元字元:
$ 表示行尾
^ 表示行首
[a-z0-9]表示字元範圍
[^]表示除了字符集中的字元以外的字元
sed的正則中 () 和 {m,n} 需要轉義
. 表示任意字元
* 表示零個或者多個
+ 一次或多次
? 零次或一次
| 表示或語法