如何使用sed替换shell中的第二列

时间:2018-11-13 04:55:33

标签: sed

我有file像这样:

1,2,3,4
5,6,7,8

我想将第二列替换为6到89。所需的输出是

1,2,3,4
5,89,7,8

但是如果我输入

index=2
cat file | sed 's/[^,]*/89/'$index

我知道

1,89,3,4
5,89,7,8

如果我输入

index=2
cat file | sed 's/[^,]6/89/'$index

没有任何变化。 为什么会这样呢?我怎样才能解决这个问题?谢谢。

2 个答案:

答案 0 :(得分:2)

由于您要更改包含6的第二列,并且使用逗号作为字段分隔符,因此使用sed实际上非常简单:

sed 's/^\([^,]*\),6,/\1,89,/`

在这里,我们利用向后引用来记住第一列。

如果要替换第5列中的6,可以执行以下操作:

sed 's/^\(\([^,]*,\)\{4\}\)6,/\189,/'

但是,使用awk更舒适:

awk 'BEGIN{FS=OFS=","}($2==6){$2=89}1'

答案 1 :(得分:0)

我通过使用awk解决了这个问题

awk 'BEGIN{FS=OFS=","} {if ($2==6) $2=89}1' file >file1