shell sed命令的具體使用
sed 命令
sed 編輯器
- sed是一種流編輯器,流編輯器會在編輯器處理數據之前基于預先提供的一組規(guī)則來編輯數據流。
- sed編輯器可以根據命令來處理數據流中的數據,這些命令要么從命令行中輸入,要么存儲在一個命令文本文件中。
sed 的工作流程的三個過程
- 讀取:sed 從輸入流(文件、管道、標準輸入)中讀取一行內容并存儲到臨時的緩沖區(qū)中(又稱模式空間,pattern space)。
- 執(zhí)行:默認情況下,所有的sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則sed 命令 將會在所有的行上依次執(zhí)行。
- 顯示:發(fā)送修改后的內容到輸出流。在發(fā)送數據后,模式空間將會被清空。在所有的文件內容都被處理完成之前,上述過程將重復執(zhí)行,直至所有內容被處理完。
在所有的文件內容都被處理完成之前,上述過程將重復執(zhí)行,直至所有內容被處理完。
注意:默認情況下所有的sed命令都是在模式空間內執(zhí)行的,因此輸入的文件并不會發(fā)生任何變化,除非是用重定向存儲輸出。
命定格式
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=:表示用指定命令來處理輸入的文本文件,只有一個操作命令時可省略,一般在執(zhí)行多個操作命令使用 -f 或--file=:表示用指定的腳本文件來處理輸入的文本文件。 -h 或--help:顯示幫助。 -n --quiet 或 silent:禁止sed編輯器輸出,但可以與p命令一起使用完成輸出。 -i 直接修改目標文本文件。
常用操作
s: 替換,替換指定字符。 d: 刪除,刪除選定的行。 a: 增加,在當前行下面增加一行指定內容。 i: 插入,在選定行上面插入一行指定內容。 c: 替換,將選定行替換為指定內容。 y: 字符轉換,轉換前后的字符長度必須相同。 p: 打印,如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內容;如果有非打印字符,則以 ASCII 碼輸出。其通常與“-n”選項一起使用。 =: 打印行號。 l: 打印數據流中的文本和不可打印的ASCII字符(比如結束符$、制表符\t)
實驗操作
打印內容
sed -n -e ‘p'

sed -n -e ‘='

sed -n -e ‘l'

sed -n -e ‘=;p'

sed -n -e ‘=' -e ‘p'

sed -n ' = p ' test

使用地址
sed編輯器有2種尋址方式
1、以數字形式表示行區(qū)間
2、用文本模式來過濾出行

sed -n ‘1p'

sed -n ‘$p'

sed -n ‘1,3p'

sed -n ‘3,$p'

sed -n ‘1,+3p' ? #打印1之后的連續(xù)3行,即1-4行

sed ‘5q' #打印前5行信息后退出,q表示退出

sed -n ‘p;n' #打印奇數行;n表示移動到下一行

sed -n ‘n;p'? ? ? ? ? ? ? ? ? ? ? ? ? #打印偶數行

sed -n ‘2,${n;p}'
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
刪除行
sed ‘d' #全刪
sed ‘3d'

sed ‘2,4d'

sed ‘$d'

sed ‘/^$/d'

sed ‘/nologin$/d' /etc/passwd

sed ‘/nologin$/!d' /etc/passwd

sed ‘/2/,/3/d'

sed ‘/1/,/3/d'

替換
行范圍 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 '/root/ s/^/#/' /etc/passwd sed -rn 's/.*root.*/#&/p' /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 '/45/c ABC' testfile2
sed 'y/145/ABC/' testfile2 #使所有的1字符轉換成A,所有的2字符轉換成B,所有的3字符轉換成C
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 #將1、2行復制到3和4行的下面
echo "111222333" | sed -r 's/(111)(222)/\2\1/' #將字符 111 和 222 互換位置
echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/' #將第一個字符和最后一個字符互換到此這篇關于shell sed命令的具體使用的文章就介紹到這了,更多相關shell sed命令內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
shell腳本監(jiān)控系統(tǒng)負載、CPU和內存使用情況
這篇文章主要介紹了shell腳本監(jiān)控系統(tǒng)負載、CPU和內存使用情況,本文分別給出監(jiān)控服務器系統(tǒng)負載情況、監(jiān)控系統(tǒng)cpu使用情況、、監(jiān)控系統(tǒng)內存情況、監(jiān)控系統(tǒng)交換分區(qū)swap使用情況的腳本,需要的朋友可以參考下2014-12-12
實現shell終端代碼分享(可用戶登錄 實現系統(tǒng)命令)
實現shell終端代碼分享,實現用戶登錄,系統(tǒng)命令使用,大家參考實現吧2013-12-12

