sed 语言学习技巧(2)
Sed写法
1)Sed由于处理方式是多个命令同时对一行进行处理,所以在很多时候需要用while将整个要处理的文件包起来,一行一行的来进行处理,采用的结构如下
while($linecurrent <$lineall)
@ linecurrent = $linecurrent + 1(注意符号之间是有空格的,这个特别需要注意,否则就会出现不必要的错误,@后边也是存在空格的)
end
提取lineall的方法:set lineall = wc –l < $filename
这种方式
2)另外,很多时候会用if else等来将程序条件等包起来,而且定义相应的条件时可以设定相应的flag,只有在满足相应的条件的flag满足要求时,才进行相应的变化,这可以很大程度上减少代码数量;if的用法如下:
if(condition)then
Coding context
endif
如上所述,相应的要注意if后边要跟着相应的then,最后要有endif。
3)另外还有一些方法可以用来匹配相应的行中的内容的方式:
set a sed –n “$line_current”’s/condition1/context/p‘ $filename
这种方式可以匹配相应的context并将内容给变量a
4)另外还有一些相应的多条指令运行和多种条件进行匹配的方式;一种是sed –n –e ’s/aaa/bbb/’ –e ‘s/vvv/ddd/’ $filename这种方式同时对内容进行多次匹配替换,或者是采用相应的\|这种逻辑或的方式来进行。
5)当然最常用的方法是采用.\{number\}的方式来进行相应的匹配,因为这个可以指定字符数目,而相应的.可以替代一个字符。
6)可以采用相应的bc来进行计算并制定相应的计算出来的数目的精确度,如下所示
set a = echo “( $var1 - $var2 )” |bc -l
的方式给变量a相应的值,并制定精确度。
相应的设定相应的变量的时候注意相应的“” ’’ ``等的不同的用法;
set avr = echo $avr | awk ‘{printf “%.3f”,$0}’
这种方式来进行;
7)注意相应的可以在程序前部分加上setnoglob和结尾加上unset noglob;
8)注意在循环中一定要有变量发生变化,否则就会产生死循环,导致程序失败,
如下有一个判定的方式
set status = 1
sed –n ’‘ “line_current” ’s/pattern1/pattern2/p’$filename | grep ‘pattern2’
set flag = $status的方式,来判定程序是否进行了匹配,当然也有其它方式来判定;
9)注意一些细节上的东西,比如说.和_,1和l,0和o
Sed的debug方法
1)相应的在相应的变量下面将指定的变量echo出来,或者echo一行数字来判断代码执行到哪一行;
2)sh –x来执行代码,判定相应的问题;
Sed出现的错误的类型:
1)Expression syntax相应的表达式有错误
2)还有的就是sed中)等没有匹配,或者相应的条件出现错误。
3)还有就是parseerroe的问题,解析错误,程序中存在误解,比如说sed中的分隔符如果采用/的话,如果要替换的内容中也存在这个/那么就可能会让程序无法确定哪个部分该被替换,因而出现错误。
评论