sed 语言学习技巧(2)

用户头像
老壳有点爽
关注
发布于: 2020 年 08 月 23 日

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中的分隔符如果采用/的话,如果要替换的内容中也存在这个/那么就可能会让程序无法确定哪个部分该被替换,因而出现错误。



用户头像

老壳有点爽

关注

连续跨行者,ICT创业者 2018.04.18 加入

连续跨行者,IC、IT、创业,横跨芯片设计前后端,软件设计、产品经理,产业互联网、教育行业、GIS、智能硬件等诸多领域

评论

发布
暂无评论
sed 语言学习技巧(2)