![sed簡(jiǎn)明教程參考資料_第1頁(yè)](http://file4.renrendoc.com/view/5cd7a81127da8c8de67bd0702aba8117/5cd7a81127da8c8de67bd0702aba81171.gif)
![sed簡(jiǎn)明教程參考資料_第2頁(yè)](http://file4.renrendoc.com/view/5cd7a81127da8c8de67bd0702aba8117/5cd7a81127da8c8de67bd0702aba81172.gif)
![sed簡(jiǎn)明教程參考資料_第3頁(yè)](http://file4.renrendoc.com/view/5cd7a81127da8c8de67bd0702aba8117/5cd7a81127da8c8de67bd0702aba81173.gif)
![sed簡(jiǎn)明教程參考資料_第4頁(yè)](http://file4.renrendoc.com/view/5cd7a81127da8c8de67bd0702aba8117/5cd7a81127da8c8de67bd0702aba81174.gif)
![sed簡(jiǎn)明教程參考資料_第5頁(yè)](http://file4.renrendoc.com/view/5cd7a81127da8c8de67bd0702aba8117/5cd7a81127da8c8de67bd0702aba81175.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
sed簡(jiǎn)明教程(轉(zhuǎn))2013-03-3015:51:19分類:LINUXsed全名叫streameditor,流編輯器,用程序的方式來編輯文本,相當(dāng)?shù)膆acker啊。sed基本上就是玩正則模式匹配,所以,玩sed的人,正則表達(dá)式一般都比較強(qiáng)。同樣,本篇文章不會(huì)說sed的全部東西,你可以參看sed的手冊(cè),我這里主要還是想和大家競(jìng)爭(zhēng)一下那些從手機(jī)指縫間或馬桶里流走的時(shí)間,用這些時(shí)間來學(xué)習(xí)一些東西。當(dāng)然,接下來的還是要靠大家自己雙手。用s命令替換我使用下面的這段文本做演示:$
cat
pets.txtThisismy
cat
my
cat'snameisbettyThisismydog
mydog'snameisfrankThisismyfish
myfish'snameisgeorgeThisismygoat
mygoat'snameisadam把其中的my字符串替換成HaoChen’s,下面的語(yǔ)句應(yīng)該很好理解(s表示替換命令,/my/表示匹配my,/HaoChen’s/表示把匹配替換成HaoChen’s,/g表示一行上的替換所有的匹配):$
sed
"s/my/HaoChen's/g"
pets.txtThisisHaoChen's
cat
HaoChen'scat'snameisbettyThisisHaoChen'sdog
HaoChen'sdog'snameisfrankThisisHaoChen'sfish
HaoChen'sfish'snameisgeorgeThisisHaoChen'sgoat
HaoChen'sgoat'snameisadam注意:如果你要使用單引號(hào),那么你沒辦法通過\’這樣來轉(zhuǎn)義,就有雙引號(hào)就可以了,在雙引號(hào)內(nèi)可以用\”來轉(zhuǎn)義。再注意:上面的sed并沒有對(duì)文件的內(nèi)容改變,只是把處理過后的內(nèi)容輸出,如果你要寫回文件,你可以使用重定向,如:$
sed
"s/my/HaoChen's/g"
pets.txt>hao_pets.txt或使用-i參數(shù)直接修改文件內(nèi)容:$
sed
-i
"s/my/HaoChen's/g"
pets.txt在每一行最前面加點(diǎn)東西:$
sed
's/^/#/g'
pets.txt#Thisismycat#
mycat'snameisbetty#Thisismydog#
mydog'snameisfrank#Thisismyfish#
myfish'snameisgeorge#Thisismygoat#
mygoat'snameisadam在每一行最后面加點(diǎn)東西:$
sed
's/$/---/g'
pets.txtThisismy
cat
---
my
cat'snameisbetty---Thisismydog---
mydog'snameisfrank---Thisismyfish---
myfish'snameisgeorge---Thisismygoat---
mygoat'snameisadam---順手介紹一下正則表達(dá)式的一些最基本的東西:^表示一行的開頭。如:/^#/以#開頭的匹配。$表示一行的結(jié)尾。如:/}$/以}結(jié)尾的匹配。\<表示詞首。如
\<abc表示以abc為首的詞。\>表示詞尾。如abc\>表示以abc結(jié)尾的詞。.表示任何單個(gè)字符。*表示某個(gè)字符出現(xiàn)了0次或多次。[]字符集合。如:[abc]表示匹配a或b或c,還有[a-zA-Z]表示匹配所有的26個(gè)字符。如果其中有^表示反,如[^a]表示非a的字符正規(guī)則表達(dá)式是一些很牛的事,比如我們要去掉某html中的tags:html.txt1<b>This</b>iswhat<span
style="text-decoration:underline;">I</span>meant.Understand?看看我們的sed命令#如果你這樣搞的話,就會(huì)有問題$
sed
's/<.*>//g'
html.txt
Understand?#要解決上面的那個(gè)問題,就得像下面這樣。#其中的'[^>]'指定了除了>的字符重復(fù)0次或多次。$
sed
's/<[^>]*>//g'
html.txtThisiswhatImeant.Understand?我們?cè)賮砜纯粗付ㄐ枰鎿Q的內(nèi)容:$
sed
"3s/my/your/g"
pets.txtThisismy
cat
my
cat'snameisbettyThisisyourdog
mydog'snameisfrankThisismyfish
myfish'snameisgeorgeThisismygoat
mygoat'snameisadam下面的命令只替換第3到第6行的文本。$
sed
"3,6s/my/your/g"
pets.txtThisismy
cat
my
cat'snameisbettyThisisyourdog
yourdog'snameisfrankThisisyourfish
yourfish'snameisgeorgeThisismygoat
mygoat'snameisadam$
cat
my.txtThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorgeThisismygoat,mygoat'snameisadam只替換每一行的第一個(gè)s:$
sed
's/s/S/1'
my.txtThiSismy
cat,my
cat'snameisbettyThiSismydog,mydog'snameisfrankThiSismyfish,myfish'snameisgeorgeThiSismygoat,mygoat'snameisadam只替換每一行的第二個(gè)s:$
sed
's/s/S/2'
my.txtThisiSmy
cat,my
cat'snameisbettyThisiSmydog,mydog'snameisfrankThisiSmyfish,myfish'snameisgeorgeThisiSmygoat,mygoat'snameisadam只替換第一行的第3個(gè)以后的s:$
sed
's/s/S/3g'
my.txtThisismy
cat,my
cat'SnameiSbettyThisismydog,mydog'SnameiSfrankThisismyfiSh,myfiSh'SnameiSgeorgeThisismygoat,mygoat'SnameiSadam多個(gè)匹配如果我們需要一次替換多個(gè)模式,可參看下面的示例:(第一個(gè)模式把第一行到第三行的my替換成your,第二個(gè)則把第3行以后的This替換成了That)$
sed
'1,3s/my/your/g;3,$s/This/That/g'
my.txtThisisyour
cat,your
cat'snameisbettyThisisyourdog,yourdog'snameisfrankThatisyourfish,yourfish'snameisgeorgeThatismygoat,mygoat'snameisadam上面的命令等價(jià)于:(注:下面使用的是sed的-e命令行參數(shù))sed
-e
'1,3s/my/your/g'
-e
'3,$s/This/That/g'
my.txt我們可以使用&來當(dāng)做被匹配的變量,然后可以在基本左右加點(diǎn)東西。如下所示:$
sed
's/my/[&]/g'
my.txtThisis[my]
cat,[my]
cat'snameisbettyThisis[my]dog,[my]dog'snameisfrankThisis[my]fish,[my]fish'snameisgeorgeThisis[my]goat,[my]goat'snameisadam圓括號(hào)匹配使用圓括號(hào)匹配的示例:(圓括號(hào)括起來的正則表達(dá)式所匹配的字符串會(huì)可以當(dāng)成變量來使用,sed中使用的是\1,\2…)$
sed
's/Thisismy\([^,]*\),.*is\(.*\)/\1:\2/g'
my.txtcat:bettydog:frankfish:georgegoat:adam上面這個(gè)例子中的正則表達(dá)式有點(diǎn)復(fù)雜,解開如下(去掉轉(zhuǎn)義字符):正則為:Thisismy([^,]*),.*is(.*)匹配為:Thisismy(cat),……….is(betty)然后:\1就是cat,\2就是bettysed的命令讓我們回到最一開始的例子pets.txt,讓我們來看幾個(gè)命令:N命令先來看N命令——把下一行的內(nèi)容納入當(dāng)成緩沖區(qū)做匹配。下面的的示例會(huì)把原文本中的偶數(shù)行納入奇數(shù)行匹配,而s只匹配并替換一次,所以,就成了下面的結(jié)果:$
sed
'N;s/my/your/'
pets.txtThisisyour
cat
my
cat'snameisbettyThisisyourdog
mydog'snameisfrankThisisyourfish
myfish'snameisgeorgeThisisyourgoat
mygoat'snameisadam也就是說,原來的文件成了:Thisismy
cat\n
my
cat'snameisbettyThisismydog\n
mydog'snameisfrankThisismyfish\n
myfish'snameisgeorgeThisismygoat\n
mygoat'snameisadam這樣一來,下面的例子你就明白了,$
sed
'N;s/\n/,/'
pets.txtThisismy
cat,
my
cat'snameisbettyThisismydog,
mydog'snameisfrankThisismyfish,
myfish'snameisgeorgeThisismygoat,
mygoat'snameisadama命令和i命令a命令就是append,i命令就是insert,它們是用來添加行的。如:#其中的1i表明,其要在第1行前插入一行(insert)$
sed
"1iThisismymonkey,mymonkey'snameiswukong"
my.txtThisismymonkey,mymonkey'snameiswukongThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorgeThisismygoat,mygoat'snameisadam#其中的1a表明,其要在最后一行后追加一行(append)$
sed
"$aThisismymonkey,mymonkey'snameiswukong"
my.txtThisismy
cat,my
cat'snameisbettyThisismymonkey,mymonkey'snameiswukongThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorgeThisismygoat,mygoat'snameisadam我們可以運(yùn)用匹配來添加文本:#注意其中的/fish/a,這意思是匹配到/fish/后就追加一行$
sed
"/fish/aThisismymonkey,mymonkey'snameiswukong"
my.txtThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorgeThisismymonkey,mymonkey'snameiswukongThisismygoat,mygoat'snameisadam下面這個(gè)例子是對(duì)每一行都挺插入:$
sed
"/my/a----"
my.txtThisismy
cat,my
cat'snameisbetty----Thisismydog,mydog'snameisfrank----Thisismyfish,myfish'snameisgeorge----Thisismygoat,mygoat'snameisadam----c命令c命令是替換匹配行$
sed
"2cThisismymonkey,mymonkey'snameiswukong"
my.txtThisismy
cat,my
cat'snameisbettyThisismymonkey,mymonkey'snameiswukongThisismyfish,myfish'snameisgeorgeThisismygoat,mygoat'snameisadam$
sed
"/fish/cThisismymonkey,mymonkey'snameiswukong"
my.txtThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismymonkey,mymonkey'snameiswukongThisismygoat,mygoat'snameisadamd命令刪除匹配行$
sed
'/fish/d'
my.txtThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismygoat,mygoat'snameisadam$
sed
'2d'
my.txtThisismy
cat,my
cat'snameisbettyThisismyfish,myfish'snameisgeorgeThisismygoat,mygoat'snameisadam$
sed
'2,$d'
my.txtThisismy
cat,my
cat'snameisbettyp命令打印命令你可以把這個(gè)命令當(dāng)成grep式的命令#匹配fish并輸出,可以看到fish的那一行被打了兩遍,#這是因?yàn)閟ed處理時(shí)會(huì)把處理的信息輸出$
sed
'/fish/p'
my.txtThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorgeThisismyfish,myfish'snameisgeorgeThisismygoat,mygoat'snameisadam#使用n參數(shù)就好了$
sed
-n
'/fish/p'
my.txtThisismyfish,myfish'snameisgeorge#從一個(gè)模式到另一個(gè)模式$
sed
-n
'/dog/,/fish/p'
my.txtThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorge#從第一行打印到匹配fish成功的那一行$
sed
-n
'1,/fish/p'
my.txtThisismy
cat,my
cat'snameisbettyThisismydog,mydog'snameisfrankThisismyfish,myfish'snameisgeorge幾個(gè)知識(shí)點(diǎn)好了,下面我們要介紹四個(gè)sed的基本知識(shí)點(diǎn):PatternSpace第零個(gè)是關(guān)于-n參數(shù)的,大家也許沒看懂,沒關(guān)系,我們來看一下sed處理文本的偽代碼,并了解一下PatternSpace的概念:foreachlineinfile{
//放入把行Pattern_Space
Pattern_Space<=line;
//對(duì)每個(gè)patternspace執(zhí)行sed命令
Pattern_Space<=EXEC(sed_cmd,Pattern_Space);
//如果沒有指定-n則輸出處理后的Pattern_Space
if
(sedoptionhasn't
"-n")
{
printPattern_Space
}}Address第一個(gè)是關(guān)于address,幾乎上述所有的命令都是這樣的(注:其中的!表示匹配成功后是否執(zhí)行命令)[address[,address]][!]{cmd}address可以是一個(gè)數(shù)字,也可以是一個(gè)模式,你可以通過逗號(hào)要分隔兩個(gè)address表示兩個(gè)address的區(qū)間,參執(zhí)行命令cmd,偽代碼如下:bool
bexec=
falseforeachlineinfile{
if
(match(address1)){
bexec=
true;
}
if
(bexec==
true){
EXEC(sed_cmd);
}
if
(match(address2)){
bexec=
false;
}}關(guān)于address可以使用相對(duì)位置,如:#其中的+3表示后面連續(xù)3行$
sed
'/dog/,+3s/^/#/g'
pets.txtThisismy
cat
my
cat'snameisbetty#Thisismydog#
mydog'snameisfrank#Thisismyfish#
myfish'snameisgeorgeThisismygoat
mygoat'snameisadam命令打包第二個(gè)是cmd可以是多個(gè),它們可以用分號(hào)分開,可以用大括號(hào)括起來作為嵌套命令。下面是幾個(gè)例子:$
cat
pets.txtThisismy
cat
my
cat'snameisbettyThisismydog
mydog'snameisfrankThisismyfish
myfish'snameisgeorgeThisismygoat
mygoat'snameisadam#對(duì)3行到第6行,執(zhí)行命令/This/d$
sed
'3,6{/This/d}'
pets.txtThisismy
cat
my
cat'snameisbetty
mydog'snameisfrank
myfish'snameisgeorgeThisismygoat
mygoat'snameisadam#對(duì)3行到第6行,匹配/This/成功后,再匹配/fish/,成功后執(zhí)行d命
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司年會(huì)領(lǐng)導(dǎo)發(fā)言稿范文(17篇)
- 2024-2025學(xué)年廣東省梅州市平遠(yuǎn)縣實(shí)驗(yàn)中學(xué)高三上學(xué)期9月月考?xì)v史試卷
- 2024-2025學(xué)年第17課挽救民族危亡的斗爭(zhēng)-勤徑學(xué)升高中歷史必修上同步練測(cè)(統(tǒng)編版2019)
- 2025年以車抵押還款協(xié)議書范本
- 2025年個(gè)人項(xiàng)目委托合同
- 2025年臨時(shí)展覽館場(chǎng)地租賃合同范文
- 2025年涂料助劑:流平劑項(xiàng)目申請(qǐng)報(bào)告模范
- 2025年企業(yè)會(huì)議設(shè)備租賃合同范本
- 2025年個(gè)人與團(tuán)隊(duì)共同成長(zhǎng)策劃協(xié)議
- 2025年全場(chǎng)景住宅交易居間合同模板
- 國(guó)產(chǎn)氟塑料流體控制件生產(chǎn)企業(yè)
- 空氣能安裝合同
- 初二上冊(cè)的數(shù)學(xué)試卷
- 四大名繡課件-高一上學(xué)期中華傳統(tǒng)文化主題班會(huì)
- 2025年奇瑞汽車招聘筆試參考題庫(kù)含答案解析
- 起重機(jī)械生產(chǎn)單位題庫(kù)質(zhì)量安全員
- 2024-2025學(xué)年外研版七年級(jí)英語(yǔ)上學(xué)期期末復(fù)習(xí) 專題04 閱讀理解CD篇20篇 【考題猜想】
- 中國(guó)血管性認(rèn)知障礙診治指南(2024版)解讀
- 后顱窩腫瘤的護(hù)理
- 2024胃食管反流病指南
- 《中國(guó)成人支氣管擴(kuò)張癥診斷與治療專家共識(shí)2021》
評(píng)論
0/150
提交評(píng)論