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

Shell 如何使用sed在指定行中后缀指定字母,shell,sed,Shell,Sed,我有这样一个文件: www,/something else/,ese www,/something else/,aes arc,/something else/,ese old,/something else/,ese sed -f example.sed input.txt 我想在所有行上加后缀“、0”,除了“www、/something/、aes”和“、1”、“old、/something/、ese”之外,不加任何内容。 所以结果应该是这样的: www,/something else/,

我有这样一个文件:

www,/something else/,ese
www,/something else/,aes
arc,/something else/,ese
old,/something else/,ese
sed -f example.sed input.txt
我想在所有行上加后缀“、0”,除了“www、/something/、aes”和“、1”、“old、/something/、ese”之外,不加任何内容。 所以结果应该是这样的:

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

我怎么能做到?谢谢。

您可以使用此
awk

awk -F',' '{$4="0";} $1=="www" && $3=="aes"{$4="1";} $1=="old"{NF=NF-1}1' OFS=, yourfile
这可能行得通

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

“其他东西”可以被任何模式替换,如
*
,但
(或使用另一个分隔符)

您可以使用以下
sed
脚本:

example.sed:

#将1附加到www。。。aes并转到输入中的下一行
/www,\/something\/,aes/{s/*/\0,1/;b next}
#在此处不执行任何操作,然后转到输入中的下一行
/旧的,\/something\/,ese/b下一个
#为所有其他行追加0
s/*/\0,0/
#上述跳转语句的标签(b下一步)
:下一个
这样执行:

www,/something else/,ese
www,/something else/,aes
arc,/something else/,ese
old,/something else/,ese
sed -f example.sed input.txt
这可能适用于您(GNU-sed):


正如你所描述的那样。

我认为输出中的第二行应该是
www,/something other/,aes,1
另一种类似的方式
awk'{p=“,“0}/aes/{p=”,“1}/aes/{p=”,“1}/old/{p=”,“print$0p=”或
sed$0p}文件
awk'{p=“,0'/aes/{p=“,1}/old/{p=”{print$0p}或
sed/{p/}/旧的/bn;s/*/\0,0/;:n'
实际上是
1
无字符:DOr
awk'{p=“,0”}/aes/{p=“,1”}/old/{p=“”}{$0=$0p}7'
这也是
1
char-less.:D:D。。但是,我仍然认为这是一个典型的
sed
任务:编辑文件。@hek2mgl如果删除冗余标签,您可以进一步减少您的解决方案
sed'/aes/{s/*/\0,1/;b}/旧的/b;s/*/\0,0/'文件