目錄
一、sed的相關(guān)知識及其工作流程
1)sed編輯器的介紹
2)sed 流編輯器的工作過程
3)怎么解決sed命令處理容量過大,或則內(nèi)容過多的而導(dǎo)致執(zhí)行效率慢的問題?
解決方案一(推薦用法):
解決方案二:
二、sed命令格式與選項操作符
1)sed命令格式
?基本操作格式:?
2)sed命令的常用選項
?3)sed命令的操作符?
三、?sed命令的打印功能
1)默認(rèn)打印方式
無要求的默認(rèn)打印
打印時對行號的操作
sed命令的尋址打印
①以數(shù)字形式打印行區(qū)間
?編輯
②文本模式過濾行內(nèi)容
四、sed的刪除操作?
?1)通過行號進(jìn)行刪除
?2)匹配字符串內(nèi)容刪除
?3)字符串搭配正則進(jìn)行刪除
?五、sed命令替換
1)字符串的替換?
匹配單字符進(jìn)行替換
?編輯
2)進(jìn)行字母字符進(jìn)行大小的替換?
大寫轉(zhuǎn)換為小寫?
小寫轉(zhuǎn)換為大寫
3)知識擴(kuò)充? “//”是可以被其他符號所替換的
經(jīng)典分隔符轉(zhuǎn)換案例
4)整行替換
使用c進(jìn)行替換,是對整行內(nèi)容進(jìn)行替換
5)單字符的替換?
?六、sed命令的增加
1)sed 命令行插入?
2)sed命令行后讀取文件插入
?七、sed 命令進(jìn)行復(fù)制粘貼
八、sed命令中字符串和字符的位置交換
一、sed的相關(guān)知識及其工作流程
1)sed編輯器的介紹
sed是一種流編輯器,它一次處理一行內(nèi)容。處理時,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復(fù)操作;編寫轉(zhuǎn)換程序等
2)sed 流編輯器的工作過程
sed的工作流程主要包括讀取、執(zhí)行和顯示三個過程:
- 讀取: sed從輸入流 (文件、管道、標(biāo)準(zhǔn)輸入) 中讀取一行內(nèi)容并存儲到臨時的緩沖區(qū)中(又稱模式空間,pattern space )
- 執(zhí)行: 默認(rèn)情況下,所有的sed命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則sed命令將會在所有的行上依次執(zhí)行
- 顯示: 發(fā)送修改后的內(nèi)容到輸出流。在發(fā)送數(shù)據(jù)后,模式空間將會被清空。在所有的文件內(nèi)容都被處理完成之前,上述過程將重復(fù)執(zhí)行, 直至所有內(nèi)容被處理完
在所有的文件內(nèi)容都被處理完成之前,上述過程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完
注意:默認(rèn)情況下所有的sed命令都是在模式空間內(nèi)執(zhí)行的,因此輸入的文件并不會發(fā)生任何變化,除非使用"sed -i"修改源文件、或使用重定向輸出到新的文件中?
3)怎么解決sed命令處理容量過大,或則內(nèi)容過多的而導(dǎo)致執(zhí)行效率慢的問題?
解決方案一(推薦用法):
使用split命令進(jìn)行文件分割(例如文件如果是百萬行,就創(chuàng)建一個單獨的目錄將文件分割為一百個為一萬行的文本)再使用sed命令進(jìn)行處理,除了split分割,也可以使用一個遍歷分割shell腳本進(jìn)行執(zhí)行
解決方案二:
使用cat ?文件名|sed ?處理 ? ? (但是該方案只能針對中大型的文件文本,如果文本量過大,處理效果不好)
二、sed命令格式與選項操作符
1)sed命令格式
?基本操作格式:?
- sed -e '操作'? 文件1? ?文件2 ?
- sed -n -e '操作'? ?文件1? ?文件2
- sed -f? ?腳本文件? ?文件1? 文件2
- sed -i -e '操作'? 文件1? 文件2
-
執(zhí)行多條命令的格式:
方式一:?
sed -n -e '操作1' -e '操作2' 文件 ??
方式二:?
?sed -n -e '操作1;操作2' 文件 ?? ?
方式三:
sed -e 'n{ ? 操作1 ? 操作2 ? ...... ? }' 文件1
2)sed命令的常用選項
選型 | 作用 |
-e 或--expression= | 表示用指定命令來處理輸入的文本文件,只有一個操作命令時可省略,一般在執(zhí)行多個操作命令使用 |
-f 或--file= | 表示用指定的腳本文件來處理輸入的文本文件 |
-h 或--help | 顯示幫助 |
-n、--quiet或--silent | 禁止sed編輯器輸出,但可以與p命令一起使用完成輸出 |
-i | 直接修改目標(biāo)文本文件 |
?3)sed命令的操作符?
操作符 | 作用 |
s | 替換,替換指定字符 |
d | 刪除,刪除選定的行 |
a | 增加,在當(dāng)前行下方增加一行指定內(nèi)容 |
i | 插入,在選定行上方插入一行指定內(nèi)容 |
c | 替換,將選定行替換為指定內(nèi)容 |
y | 字符轉(zhuǎn)換,轉(zhuǎn)換前后的字符長度必須相同 |
p | 打印行內(nèi)容。如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內(nèi)容;如果有非打印字符,則以ASCII碼輸出。其通常與"-n"選項一起使用 |
= | 打印行號 |
l (小寫L) | 打印數(shù)據(jù)流中的文本和不可打印的ASCII字符(比如結(jié)束符$、制表符\t) |
三、?sed命令的打印功能
1)默認(rèn)打印方式
無要求的默認(rèn)打印
[root@localhost sed]#sed -e 'p' english.txt
[root@localhost sed]#sed -n 'p' english.txt
打印時對行號的操作
[root@localhost sed]#sed -n '=' english.txt
[root@localhost sed]#sed -n '=;p' english.txt
sed命令的尋址打印
①以數(shù)字形式打印行區(qū)間
方式一:按照行號尋求內(nèi)容
[root@localhost sed]#sed -n '1p' english.txt
[root@localhost sed]#sed -n '4p' english.txt
[root@localhost sed]#sed -n '$p' english.txt
方式二:進(jìn)行行號范圍區(qū)間的打印
[root@localhost sed]#sed -n '1,3p' english.txt
[root@localhost sed]#sed -n '5,$p' english.txt
[root@localhost sed]#sed -n '5,+2p' english.txt
[root@localhost sed]#sed -e '5q' english.txt
?方式三:指定間隔打印
[root@localhost sed]#sed -n -e '5p' -e'$p' english.txt
[root@localhost sed]#sed -n -e '2p' -e'3p' english.txt
方式四:對奇數(shù)行和偶數(shù)行的打印?
[root@localhost sed]#sed -n 'n;p' english.txt
[root@localhost sed]#sed -n 'p;n' english.txt
②文本模式過濾行內(nèi)容
方式一:對包含的字符串進(jìn)行過濾打印
[root@localhost sed]#sed -n '/o/p' english.txt
[root@localhost sed]#sed -n '/th/p' english.txt
?方式二:應(yīng)用基礎(chǔ)正則表達(dá)式進(jìn)行打印
[root@localhost sed]#sed -n '/^root/p' /etc/passwd
[root@localhost sed]#sed -n '/bash$/p' /etc/passwd
[root@localhost sed]#sed -n '4,/bash$/p' /etc/passwd
方式三:使用擴(kuò)展正則表達(dá)式進(jìn)行打印
注意:?
sed -r 支持?jǐn)U展正則表達(dá)式。同時在 使用{n}、{n,}、{n,m}時,括號{}前不需要加反斜杠\?
[root@localhost sed]#sed -r -n '/(99:){2,}/p' /etc/passwd
[root@localhost sed]#sed -r -n '/^root|bash$/p' /etc/passwd
四、sed的刪除操作?
注意:?
以下的操作均為在默認(rèn)情況下操作,有測試的效果,sed? -i? ?時會對文本進(jìn)行實際操作(建議對目標(biāo)文件先進(jìn)行備份,再進(jìn)行操作)
?1)通過行號進(jìn)行刪除
[root@localhost sed]#sed -n '3d;p' english.txt
[root@localhost sed]#sed -n '5,8d;p' english.txt
[root@localhost sed]#sed -n '5,$d;p' english.txt
[root@localhost sed]#sed '4,6!d' english.txt
?2)匹配字符串內(nèi)容刪除
[root@localhost sed]#sed '/one/d' english.txt
[root@localhost sed]#sed '/one/,/six/d' english.txt
[root@localhost sed]#sed '/one/,/six/!d' english.txt
[root@localhost sed]#sed '/six/!d' english.txt
?
?3)字符串搭配正則進(jìn)行刪除
[root@localhost sed]#sed '/^$/d' english.txt
刪除空行的三種方法:
- grep -v "^$" file.txt //過濾出非空行
- cat file.txt |tr -s "\n" //壓縮換行符
- sed '/^$/d' file.txt //刪除空行
?五、sed命令替換
格式:
行范圍 s/舊字符串/新字符串/替換標(biāo)記
替換標(biāo)記:
數(shù)字:表明新字符串將替換第幾處匹配的地方
g:表面新字符串將會替換所有匹配的地方
p:打印與替換命令匹配的行,與-n一起使用
w 文件:將替換的結(jié)果寫入文件中
sed命令的替換中:
s:替換字符串
c:整行替換
y:字符替換,替換前后的字符串長度必須相同
1)字符串的替換?
匹配單字符進(jìn)行替換
[root@localhost sed]#sed -n 's/root/test/2p' /etc/passwd
[root@localhost sed]#sed -n 's/root/test/gp' /etc/passwd
[root@localhost sed]# sed -n '/^root/ s/^/#/p' /etc/passwd
2)進(jìn)行字母字符進(jìn)行大小的替換?
大寫轉(zhuǎn)換為小寫?
[root@localhost sed]#sed -i 's/[A-Z]/\l&/g' english.txt
小寫轉(zhuǎn)換為大寫
[root@localhost sed]#sed -i 's/[a-z]/\u&/' english.txt
[root@localhost sed]#sed -i 's/[a-z]/\U&/' english.txt
[root@localhost sed]#sed -i 's/[a-z]/\U&/g' english.txt
3)知識擴(kuò)充? “//”是可以被其他符號所替換的
經(jīng)典分隔符轉(zhuǎn)換案例
此時9代替/的作用,加上\才為數(shù)字9,否則為分隔符
4)整行替換
使用c進(jìn)行替換,是對整行內(nèi)容進(jìn)行替換
[root@localhost sed]# sed '/ONE/c 22' english.txt
[root@localhost sed]# sed '/TWO/c TEST' english.txt
[root@localhost sed]# sed 'y/TH/12/' english.txt
5)單字符的替換?
#使用y,是對單個字符進(jìn)行替換,每個字符需要一一對應(yīng),不是整體替換。前后字符串長度需要一致,不然會報錯
[root@localhost sed]# sed 'y/TH/12/' english.txt
?六、sed命令的增加
a:在行后添加內(nèi)容
i:在行前插入內(nèi)容
r:在行后讀入文件內(nèi)容
1)sed 命令行插入?
[root@localhost sed]# sed '/THREE/a 123 ' english.txt
[root@localhost sed]# sed '/THREE/i 123 ' english.txt
2)sed命令行后讀取文件插入
[root@localhost sed]#sed '$r english2.txt' english.txt
?七、sed 命令進(jìn)行復(fù)制粘貼
#H復(fù)制、d刪除、G粘貼到指定行下方
[root@localhost sed]#sed ?'1,3 {H;G};$G' english.txt?
?
[root@localhost sed]#sed ?'1,3 {H;d};$G' english.txt?
文章來源:http://www.zghlxwxcb.cn/news/detail-441563.html
八、sed命令中字符串和字符的位置交換
[root@localhost sed]#echo 123abc|sed -r 's/(123)(abc)/\2\1/'
[root@localhost sed]#echo 123abc|sed -r 's/(.)(.)(.)(.)(.)(.)/\6\5\4\3\2\1/'
文章來源地址http://www.zghlxwxcb.cn/news/detail-441563.html
到了這里,關(guān)于Linux文本之sed流編輯器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!