如何在特定行中使用sed后缀特定字母

时间:2014-07-02 07:29:35

标签: shell sed

我有一个这样的文件:

www,/something else/,ese
www,/something else/,aes
arc,/something else/,ese
old,/something else/,ese

我想要postfix",0"除了" www,/ else else /,aes"与",1"," old,/ something else /,ese"没有。 所以结果应该是这样的:

www,/something else/,ese,0
www,/something else/,aee,1
arc,/something else/,ese,0
old,/something else/,ese

我怎么能做到这一点?感谢。

5 个答案:

答案 0 :(得分:0)

您可以使用此awk

awk -F',' '{$4="0";} $1=="www" && $3=="aes"{$4="1";} $1=="old"{NF=NF-1}1' OFS=, yourfile

答案 1 :(得分:0)

这可能有效。

awk 'p="0" $0~/aes/ {p=1} $0~/old/ {p=""} {print $0(p~/0|1/?",":"")p}' file
www,/something else/,ese,0
www,/something else/,aes,1
arc,/something else/,ese,0
old,/something else/,ese

答案 2 :(得分:0)

sed '\#^www,/something else/,ese$# {s//&,1/;b;}
     \#^old,/something else/,ese$# b
     s/$/,0/' YourFile

其他内容可以替换为任何模式,例如.*#(或使用其他分隔符)

答案 3 :(得分:0)

您可以使用以下sed脚本:

example.sed:

# Append the 1 to www ... aes and got to next line in input
/www,\/something else\/,aes/ {s/.*/\0,1/;b next}

# Do nothing here and go to next line in input
/old,\/something else\/,ese/b next

# Append the 0 for all other lines
s/.*/\0,0/

# Label for above jump statements (b next)
:next

执行它:

sed -f example.sed input.txt

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/$/,0/;s/^(www,/something else/,aes)..$/\1,1/;s/^(old,/something else/,ese)..$/\1/' file

正如你所描述的那样。