Sed(2)

Sed寫法

1)Sed由于處理方式是多個(gè)命令同時(shí)對(duì)一行進(jìn)行處理,所以在很多時(shí)候需要用while將整個(gè)要處理的文件包起來(lái),一行一行的來(lái)進(jìn)行處理,采用的結(jié)構(gòu)如下

while($line_current <$line_all)

@ line_current? =?$line_current? +? 1(注意符號(hào)之間是有空格的,這個(gè)特別需要注意,否則就會(huì)出現(xiàn)不必要的錯(cuò)誤,@后邊也是存在空格的)

end

提取line_all的方法:set line_all = `wc –l < $filename`這種方式

2)另外,很多時(shí)候會(huì)用if else等來(lái)將程序條件等包起來(lái),而且定義相應(yīng)的條件時(shí)可以設(shè)定相應(yīng)的flag,只有在滿足相應(yīng)的條件的flag滿足要求時(shí),才進(jìn)行相應(yīng)的變化,這可以很大程度上減少代碼數(shù)量;if的用法如下:

if(condition)then

Coding context

endif

如上所述,相應(yīng)的要注意if后邊要跟著相應(yīng)的then,最后要有endif。

3)另外還有一些方法可以用來(lái)匹配相應(yīng)的行中的內(nèi)容的方式:

set?a? `sed? –n “$line_current”’s/condition1/context/p‘ $filename`這種方式可以匹配相應(yīng)的context并將內(nèi)容給變量a

4)另外還有一些相應(yīng)的多條指令運(yùn)行和多種條件進(jìn)行匹配的方式;一種是sed –n –e ’s/aaa/bbb/’ –e ‘s/vvv/ddd/’ $filename這種方式同時(shí)對(duì)內(nèi)容進(jìn)行多次匹配替換,或者是采用相應(yīng)的\|這種邏輯或的方式來(lái)進(jìn)行。

5)當(dāng)然最常用的方法是采用.\{number\}的方式來(lái)進(jìn)行相應(yīng)的匹配,因?yàn)檫@個(gè)可以指定字符數(shù)目,而相應(yīng)的.可以替代一個(gè)字符。

6)可以采用相應(yīng)的bc來(lái)進(jìn)行計(jì)算并制定相應(yīng)的計(jì)算出來(lái)的數(shù)目的精確度,如下所示

set a = `echo “( $var1 - $var2 )” |bc? -l`的方式給變量a相應(yīng)的值,并制定精確度。

相應(yīng)的設(shè)定相應(yīng)的變量的時(shí)候注意相應(yīng)的“” ’’ ``等的不同的用法;

set avr = `echo $avr | awk ‘{printf “%.3f”,$0}’`這種方式來(lái)進(jìn)行;

7)注意相應(yīng)的可以在程序前部分加上setnoglob和結(jié)尾加上unset noglob;

8)注意在循環(huán)中一定要有變量發(fā)生變化,否則就會(huì)產(chǎn)生死循環(huán),導(dǎo)致程序失敗,

如下有一個(gè)判定的方式

set status = 1

sed –n ’‘ “l(fā)ine_current” ’s/pattern1/pattern2/p’$filename | grep ‘pattern2’

set flag = $status的方式,來(lái)判定程序是否進(jìn)行了匹配,當(dāng)然也有其它方式來(lái)判定;

9)注意一些細(xì)節(jié)上的東西,比如說(shuō).和_,1和l,0和o

Sed的debug方法

1)相應(yīng)的在相應(yīng)的變量下面將指定的變量echo出來(lái),或者echo一行數(shù)字來(lái)判斷代碼執(zhí)行到哪一行;

2)sh –x來(lái)執(zhí)行代碼,判定相應(yīng)的問(wèn)題;

Sed出現(xiàn)的錯(cuò)誤的類型:

1)Expression syntax相應(yīng)的表達(dá)式有錯(cuò)誤

2)還有的就是sed中)等沒有匹配,或者相應(yīng)的條件出現(xiàn)錯(cuò)誤。

3)還有就是parseerroe的問(wèn)題,解析錯(cuò)誤,程序中存在誤解,比如說(shuō)sed中的分隔符如果采用/的話,如果要替換的內(nèi)容中也存在這個(gè)/那么就可能會(huì)讓程序無(wú)法確定哪個(gè)部分該被替換,因而出現(xiàn)錯(cuò)誤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 個(gè)人學(xué)習(xí)批處理的初衷來(lái)源于實(shí)際工作;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過(guò)程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,781評(píng)論 0 11
  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,192評(píng)論 3 53
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,125評(píng)論 0 0
  • sed最主要的就是command部分,把這部分玩轉(zhuǎn)了,你就已經(jīng)很厲害了,而玩轉(zhuǎn)這部分的前提是玩轉(zhuǎn)正則表達(dá)式。盡管如...
    shuff1e閱讀 379評(píng)論 0 0
  • ...
    彭小語(yǔ)閱讀 365評(píng)論 0 7