shell sed命令的具體使用
sed 命令
sed 編輯器
- sed是一種流編輯器,流編輯器會在編輯器處理數(shù)據(jù)之前基于預先提供的一組規(guī)則來編輯數(shù)據(jù)流。
- sed編輯器可以根據(jù)命令來處理數(shù)據(jù)流中的數(shù)據(jù),這些命令要么從命令行中輸入,要么存儲在一個命令文本文件中。
sed 的工作流程的三個過程
- 讀?。簊ed 從輸入流(文件、管道、標準輸入)中讀取一行內容并存儲到臨時的緩沖區(qū)中(又稱模式空間,pattern space)。
- 執(zhí)行:默認情況下,所有的sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則sed 命令 將會在所有的行上依次執(zhí)行。
- 顯示:發(fā)送修改后的內容到輸出流。在發(fā)送數(shù)據(jù)后,模式空間將會被清空。在所有的文件內容都被處理完成之前,上述過程將重復執(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: 打印數(shù)據(jù)流中的文本和不可打印的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、以數(shù)字形式表示行區(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' #打印奇數(shù)行;n表示移動到下一行
sed -n ‘n;p'? ? ? ? ? ? ? ? ? ? ? ? ? #打印偶數(shù)行
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種替換標記
數(shù)字:表明新字符串將替換第幾處匹配的地方
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實現(xiàn)shell終端代碼分享(可用戶登錄 實現(xiàn)系統(tǒng)命令)
實現(xiàn)shell終端代碼分享,實現(xiàn)用戶登錄,系統(tǒng)命令使用,大家參考實現(xiàn)吧2013-12-12shell實現(xiàn)自動adsl撥號并檢測連接狀況腳本分享
這篇文章主要介紹了shell實現(xiàn)自動adsl撥號并檢測連接狀況腳本分享,本文給出了兩個腳本,一個是自動撥號腳本,一個是檢測連接狀態(tài)腳本,需要的朋友可以參考下2014-12-12