sed命令是一個面向字符流的非交互式編輯器,也就是說sed不容許用戶與它進行交互操做。sed是按行來處理文本內容的。正則表達式
首先談一下sed經常使用的經常使用格式爲:sed[選項] [動做]。編輯器
經常使用選項:spa
-n:使用安靜(silent)模式。在通常sed的用法中,全部崽子STDIN的數據通常都會會被列出到終端上。但若是加上-n參數後,則只有通過sed特殊處理的那一行(或者動做)纔會被列出來。字符串
-e:直接在命令列模式上進行sed的動做編輯。io
-f:直接將sed的動做寫在一個文件內,-f filename則能夠運行filename內的sed動做。function
-r:sed的動做支持是延伸性正規表示法的語法。(默認是正規表示法語法)。test
-i:直接修改讀取的文件內容,而不是輸出到終端。sed
functionfile
a:新增行,a的後面能夠是字串,而這些字串會在新的一行出現(目前的下一行)。搜索
c:取代行,c的後面能夠接字串,這些字串能夠取代n1,n2之間的行。
d:刪除行,由於是刪除,因此d後面一般不接任何參數,直接刪除地址表示的行。
i:插入行,i的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行)。
p:列印,亦即將某個選項的數據印出。一般p會與參數sed -n一塊兒運行。
s:替換,能夠直接進行替換的工做,一般這個s的動做能夠搭配正規表示法,例如1,20s/old/new/g通常是替換符合條件的字符串而不是整行。
通常function的前面會有一個地址的限制。例如[地址] function,表示咱們的動做要操做的行。下面咱們經過具體的離職直觀的看看sed的使用方法。
// test.txt 內容以下
11 aa
22 bb
33 cc
44 dd
55 2e
刪除行(不替換文件,只是打印到控制檯上面)
sed '1,2d' test.txt 表示刪除第1行到第2行的內容。
sed '1,$d' test.txt 表示刪除第1行到最後一行的內容。
sed '/2/d' test.txt 表示刪除包含2的全部行。
sed '/^2/d' text.txt 表示刪除以2開頭的全部行。
新增行(不替換文件,只是打印到控制檯上面)
sed '1a hello world' text.txt 表示在第1行的後面添加一行,添加的內容就是"hello world"。
sed '1i hello world' text.txt 表示在第1一行的前面添加一行,添加的內容是"hello world"。
替換行(不替換文件,只是打印到控制檯上面)
sed '1c hello world' text.txt 表示將第1行的內容替換爲"hello world"。
sed '/^2/c hello world' text.txt 表示將以2開頭的行所有替換爲"hello world"。
替換部分字符串而不是整行(不替換文件,只是打印到控制檯上面)
sed中除了上面的命令是針對證行進行操做的以外,還提供一個替換明明,該命令對某一行中的部分字符串進行操做,下面舉一個簡單的例子,仍是一樣的文本內容,執行下面的命令:
sed 's/aa/AA/' text.txt 表示將文件中的aa替換爲AA。s/待替換的字符串/新字符串/。這裏只置換每一行遇到的第一個aa。
sed 's/aa/AA/g' text.txt 表示將文件中的aa替換爲AA,加入g選項以後,表示爲全局替換。
sed '1s/aa/AA/g' text.txt 表示將文件中的第1行的aa進行替換。
sed '5,$s/aa/AA/g' text.txt 表示將文件中第5行到末尾進行替換。
sed '/^[0-9]/s/aa/AA/g' text.txt 表示將文件中以數字開頭的行進行替換操做。
搜索並輸出行內容(不替換文件,只是打印到控制檯上面)
sed -n '2p' text.txt 表示輸出第2行。
將修改應用到文件中(替換文件)
上面舉的例子都沒有修改文件裏面的內容,只是將修改結果打印到控制檯上面,而文件是沒有修改的。
咱們可使用-i選項告訴sed直接修改文件的內容,而不是將修改結果輸出到控制檯上面。
sed -i '2d' text.txt 結果以前文件中的第二行沒有了
sed正則中的元字符
咱們知道sed中的命令前面可使用地址範圍進行限制,表示對文件的某些符合條件的行執行相應的操做,其中咱們可使用正則表達式選出想要操做的行,而sed中的正則語法可能與其餘命令的正則語法有一些不一樣,這裏面咱們列出來sed中經常使用的正則。
$ 表示行尾
^ 表示行首
[a-z0-9] 表示字符範圍
[^]表示出了字符集中的字符之外的字符
sed 的正則中\(\)和{\m,n\}須要轉義
. 表示任意字符
* 表示零個或者多個
\+ 一次或者屢次
\? 零次或者一次
\| 表示或語法