■ sed是一種流編輯器,流編輯器會在編輯器處理數據以前基於預先提供的—組規則來編輯數據流正則表達式
■ sed編輯器能夠根據命令來處理數據流中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個命令文本文件中express
讀取: sed從輸入流(文件、管道、標準輸入)中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space )bash
執行: 默認狀況下,全部的sed命令都在模式空間中順序地執行,除非指定了行的地址,不然sed命令將會在全部的行上依次執行編輯器
顯示: 發送修改後的內容到輸出流。在發送數據後,模式空間將會被清空。在全部的文件內容都被處理完成以前,上述過程將重複執行,直至全部內容被處理完ide
在全部的文件內容都被處理完成以前,上述過程將重複執行,直至全部內容被處理完ui
注意:默認狀況下全部的sed命令都是在模式空間內執行的,所以輸入的文件並不會發生任何變化,除非是用重定向存儲輸出spa
sed -e '操做' 文件1 文件2 ... sed -n -e '操做'文件1 文件2 ... sed -f 腳本文件 文件1 文件2 ... sed -i -e '操做' 文件1 文件2 ...
sed -e 'n{ 操做1 操做2 ... }’ 文件1 文件2 ...
-e 或--expression=: 表示用指定命令來處理輸入的文本文件,只有一個操做命令時可省略,通常在執行多個操做命令使用 -f 或--file=: 表示用指定的腳本文件來處理輸入的文本文件 -h 或--help: 顯示幫助 -n、--quiet 或 silent: 禁止sed編輯器輸出,但能夠與p命令一塊兒使用完成輸出 -i: 直接修改目標文本文件
s: 替換,替換指定字符 d: 刪除,刪除選定的行 a: 增長,在當前行下面增長一行指定內容 i: 插入,在選定行上面插入一行指定內容 c: 替換,將選定行替換爲指定內容 y: 字符轉換,轉換先後的字符長度必須相同 p: 打印,若是同時指定行,表示打印指定行;若是不指定行,則表示打印全部內容;若是有非打印字符,則以ASCII碼輸出。其一般與「-n」選項一塊兒使用 =: 打印行號 l (小寫L): 打印數據流中的文本和不可打印的ASCII字符(好比結束符$、製表符\t)
2、打印內容
sed -n- e 'p' testfile1 sed -n -e '=' testfile1 sed -n -e 'l' testfile1 sed--n -e '=;p' testfile1 sed -n -e '=' -e 'p' testfile1 sed -n ' > = > p > ' testfile1
3、使用地址
sed編輯器有2種尋址方式:命令行
以數字形式表示行區間3d
用文本模式來過濾出行code
sed -n '1p' testfile1 sed -n '$p' testfile1 sed -n '1, 3p' testfile1 sed -n '3, $p' testfilel sed -n '1, +3p' testfilel #打印1以後的連續3行,即1-4行 sed '5q' testfile1 #打印前5行信息後退出,q表示退出 sed -n 'p;n' testfile1 #打印奇數行; n表示移動到下一行 sed -n 'n;p' testfile1 #打印偶數行 sed -n '2,${n;p}' testfile1 sed -n '/user/p' /etc/passwd sed -n '/^a/p' /etc/passwd sed -n '/bash$/p' /etc/passwd sed -n '/ ftp\|root/p' /etc/passwd sed -n '2, /nobody/p' /etc/passwd sed -n '2, /nobody/=' /etc/passwd sed -nr '/ro{1, }t/p' /etc/passwd #-r表示支持擴展正則表達式
以數字形式表示行區間
用文本模式來過濾出行
4、刪除行sed 'd' testfile1 #全刪 sed '3d' testfile1 sed '2, 4d' testfile1 sed '$d' testfile1 sed '/^$/d' testfile1 #刪除空行 sed '/nologin$/d' /etc/passwd sed '/nologin$/!d' /etc/passwd #「!"表示取反操做 sed '/2/,/3/d' testfile2 #從第一-個位置打開行刪除功能,到第二個位置關閉行刪除功能 sed '/1/,/3/d' testfile2
5、替換
行範圍 s/舊字符串/新字符串/替換標記
4種替換標記:
數字: 代表新字符串將替換第幾處匹配的地方
g: 代表新字符串將會替換全部匹配的地方
P: 打印與替換命令匹配的行,與-n一塊兒使用
w文件: 將替換的結果寫到文件中
sed -n 's/root/admin/p' /etc/passwd sed -n 's/root/admin/2p' /etc/passwd sed -n 's/root/admin/gp' /etc/passwd sed 's/root//g' /etc/passwd sed '1,20 s/^/#/' /etc/passwd sed '/^root/ s/$/#/' /etc/passwd sed -f script.sed testfile2 sed '1,20w out.txt' /etc/passwd sed '1,20 s/^/#/w out.txt' /etc/passwd sed -n 's/\/bin\/bash/\/bin\/csh/p' /etc/passwd sed -n 's! /bin/bash! /bin/csh!p' /etc/passwd #使用「!」做爲字符串分隔符 sed -i 's9\945\9\99\98\939g' test.txt #將94599替換爲9893
sed -n 's/ root/ admin/p' /etc/passwd sed -n 's/ root/ admin/2p' /etc/passwd
sed '/45/c ABC' testfile2 sed '/45/ y/45/AB/' testfile2 sed '1,3a ABC' testfile2 sed '1i ABC' testfile2 sed '5r /etc/resolv.conf' testfile2 sed '/root/{H;d};$G' /etc/passwd #將包含root的行剪切到末尾,H表示複製到剪切板,G表示粘貼到指定行後 sed '1,2H;3,4G' /etc/passwd #將一、2行復制到3和4行的下面 echo "111222333" | sed 's/(111)(222)/2\1/' -r #將字符111和222互換位置 echo "111222333" | sed 's/^(.) (.*) (.)$/\3\2\1/' -r #將第一個字符和最後一個字符互換