久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

一篇文章學(xué)會(huì)shell工具篇之sed

sed工具執(zhí)行原理;

  • 有關(guān)sed的參數(shù)及action的常見(jiàn)操作方法;
  • 定址;
  • 模式空間和保持空間;
  • 使用標(biāo)簽

1.首先先來(lái)了解一下什么是sed?

sed叫做流編輯器,在shell腳本和Makefile中作為過(guò)濾器使用非常普遍,也就是把前一個(gè)程序的輸出引入sed的輸入,經(jīng)過(guò)一系列編輯命令轉(zhuǎn)換成為另一種格式輸出。下面我們通過(guò)一張?jiān)韴D來(lái)了解一下它的工作模式:

編輯命令的格式為,sed?? /pattern/action

一篇文章學(xué)會(huì)shell工具篇之sed

經(jīng)過(guò)sed處理后文件內(nèi)容并沒(méi)有改變,除?使用重定向存儲(chǔ)輸出。sed主要用來(lái)自動(dòng)編輯一個(gè)或多個(gè)文件;簡(jiǎn)化對(duì)文件的反復(fù)操作;sed默認(rèn)按照Basic 規(guī)范基本匹配!也就是說(shuō)類(lèi)似于( ) { } | 等特殊字符需轉(zhuǎn)義,否則就不識(shí)別,或者是用擴(kuò)展模式也可以。

2. 下面重點(diǎn)介紹一下有關(guān)sed的參數(shù)及action的操作方法

(1)-n參數(shù),p命令的action

一篇文章學(xué)會(huì)shell工具篇之sed

(2) d命令的action

一篇文章學(xué)會(huì)shell工具篇之sed

一篇文章學(xué)會(huì)shell工具篇之sed

(3)/pattern/s/pattern1/pattern2/:查找符合pattern的行,將該行第一個(gè)匹配pattern1的字符串替換為pattern2
/pattern/s/pattern1/pattern2/g:查找符合pattern的行,將該行所有匹配pattern1的字符串替換為pattern2

一篇文章學(xué)會(huì)shell工具篇之sed

一篇文章學(xué)會(huì)shell工具篇之sed

這個(gè)操作不知道大家會(huì)不會(huì)聯(lián)想到vim編輯器中的底行模式搜索,它們是類(lèi)似的。

下面總結(jié)一下sed中參數(shù)的選擇及執(zhí)行操作:

[plain]?view plain?copy

  1. <strong>參數(shù)選擇:
  2. -n:一般sed命令會(huì)把所有數(shù)據(jù)都輸出到屏幕,如果加入-n選項(xiàng)的話,則只會(huì)把經(jīng)過(guò)sed命令處理的行輸出到屏幕。
  3. -e:允許對(duì)輸入數(shù)據(jù)應(yīng)用多條sed命令編輯。
  4. -i:將修改結(jié)果直接寫(xiě)入到讀取數(shù)據(jù)的文件,而不是由屏幕輸出。(1.修改了文件;?2.由cat可查看)
  5. -f:?指定sed腳本的文件名。
  6.  
  7.  
  8. action:
  9. a:追加,在當(dāng)前行后添加一行或多行。
  10. c:行替換,用c后面的字符串替換原數(shù)據(jù)行。
  11. i:插入,在當(dāng)前行前插入一行或多行。
  12. p:打印,輸出指定的行。
  13. s:字符串替換,用一個(gè)字符串替換另外一個(gè)字符串。格式為”行范圍s/舊字符串/新字符串/g”(如果不加g的話,則表示只替換每行第一個(gè)匹配的串)。
  14. </strong>

以上沒(méi)有練習(xí)到的,有興趣的可以去嘗試嘗試!

3.再來(lái)介紹一下sed中的定址

定址用于決定對(duì)文件中哪些行進(jìn)行行編輯,地址的形式可以是數(shù)字、正則表達(dá)式、或二者的結(jié)合。如果沒(méi)有指定地址,sed將處理輸入文件的所有行。下面舉一些例子:

一篇文章學(xué)會(huì)shell工具篇之sed

一篇文章學(xué)會(huì)shell工具篇之sed

sed '/start/ ,/end/d' file?? #刪除包含’start’行和’end’行之間的行
sed '/start/, 10d' file????? ?#刪除包含’start’ 的行到第十行的內(nèi)容

4.模式空間和保持空間

(1)保持空間:用來(lái)存儲(chǔ)數(shù)據(jù),相當(dāng)于一個(gè)倉(cāng)庫(kù),它不能對(duì)數(shù)據(jù)進(jìn)行處理 ;
(2)模式空間:專(zhuān)門(mén)以行為單位對(duì)數(shù)據(jù)進(jìn)行處理。

?一般情況下,如果不顯示的使用一些選項(xiàng)的話,是不會(huì)用到保持空間的。

[plain]?view plain?copy

  1. <span?style="color:#000000;"><strong>命令:
  2. g:將保持空間的內(nèi)容拷貝到模式空間中,會(huì)將模式空間原來(lái)的值覆蓋掉。
  3. G:將保持空間的內(nèi)容追加到模式空間中。
  4. h:將模式空間的值拷貝到保持空間,會(huì)將保持空間原來(lái)的值覆蓋掉。
  5. H:將模式空間的值追加到保持空間中。
  6. d:刪除模式空間的所有行,并讀下一行到模式空間。
  7. D:刪除模式空間的第一行,不讀下一行到模式空間。
  8. n:輸出模式空間的行,讀取下一行替換當(dāng)前模式空間的行,接著執(zhí)行下一條處理命令而不是第一條命令。
  9. N:讀入下一行,追加到模式空間行后面,此時(shí)模式空間中有兩行。
  10. x:交換模式空間和保持空間的內(nèi)容。
  11. </strong></span>

例1:給每行后面添加一行空行

一篇文章學(xué)會(huì)shell工具篇之sed

例2:用sed模擬倒序(tac)打印的過(guò)程

一篇文章學(xué)會(huì)shell工具篇之sed

例3.追加匹配行到文件末尾

一篇文章學(xué)會(huì)shell工具篇之sed

例4:將一列內(nèi)容變?yōu)橐恍?/p>

一篇文章學(xué)會(huì)shell工具篇之sed

例5:求出1-100的求和

一篇文章學(xué)會(huì)shell工具篇之sed

例6:打印輸出奇數(shù)行和偶數(shù)行

一篇文章學(xué)會(huì)shell工具篇之sed

5.使用標(biāo)簽

[plain]?view plain?copy

  1. :a表示標(biāo)簽a;
  2. ba表示跳轉(zhuǎn)到a標(biāo)簽;
  3. $表示最后一行;
  4. !表示不做后續(xù)操作
  5. 所以,$!ba表示最后一行不用跳轉(zhuǎn)到a標(biāo)簽,結(jié)束此次操作。

下面舉一個(gè)例子:

一篇文章學(xué)會(huì)shell工具篇之sed

最后補(bǔ)充一點(diǎn):

[plain]?view plain?copy

  1. 與grep一樣,sed也支持特殊元字符來(lái)進(jìn)行模式查找、替換。不同的是,sed使用的正則表達(dá)式是括在斜杠線"/"之間的模式。
  2. 如果要把正則表達(dá)式分隔符"/"改為另一個(gè)字符,比如o,只要在這個(gè)字符前加一個(gè)反斜線,在字符后跟上正則表達(dá)式,再跟上這個(gè)字符即可。例如:sed?-n?'\o^56op'?datafile
  3. ^:行首定位符?????????/^my/??匹配所有以my開(kāi)頭的行;
  4. $:行尾定位符????????/my$/?匹配所有以my結(jié)尾的行;
  5. .:匹配除換行符以外的單個(gè)字符????????/m..y/?匹配包含字母m,后跟兩個(gè)任意字符,再跟字母y的行;
  6. *:匹配零個(gè)或多個(gè)前導(dǎo)字符?????????????/test*/?匹配包含字符串?tes,后跟零個(gè)或多個(gè)?t?字母的行;
  7. []:匹配指定字符組內(nèi)的任一字符????/t[eE]st/?匹配包含test?或?tEst?的行;
  8. [^]:匹配不在指定字符組內(nèi)的任一字符?????/t[^eE]st/??匹配string?以t開(kāi)頭,但st之前的那個(gè)字符不是e或E的行;
  9. &:保存查找串以便在替換串中引用?????????s/test/*&*/g??符號(hào)&代表查找串。test將被替換為*test*
  10.  
  11. \<:詞?首定位符?/\<my/?匹配包含以my開(kāi)頭的單詞的行;
  12. \>:詞尾定位符????/my\>/?匹配包含以my結(jié)尾的單詞的行;
  13. x\{m\}:連續(xù)m個(gè)x????????如:/9\{5\}/?匹配包含連續(xù)5個(gè)9的行;
  14. x\{m,\}:至少m個(gè)x???????如:/9\{5,\}/?匹配包含至少連續(xù)5個(gè)9的行;
  15. x\{m,n\}:至少m個(gè),但不超過(guò)n個(gè)x?????如:/9\{5,7\}/?匹配包含連續(xù)5到7個(gè)9的行。

還有一個(gè)單元匹配--替換的問(wèn)題:

一篇文章學(xué)會(huì)shell工具篇之sed

 

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 壶关县| 当涂县| 什邡市| 离岛区| 辉县市| 黄梅县| 江都市| 江达县| 滦平县| 台中县| 海原县| 饶阳县| 彝良县| 孟州市| 库伦旗| 卓尼县| 罗山县| 和顺县| 陆河县| 庄河市| 资中县| 黎城县| 宁都县| 田林县| 甘孜县| 濮阳县| 安化县| 将乐县| 东乡县| 东山县| 独山县| 昭苏县| 康马县| 勐海县| 常德市| 云霄县| 永川市| 榆树市| 渑池县| 冷水江市| 玛曲县|