首页 > 解决方案 > 如何使用 sed 替换 shell 中的第二列

问题描述

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

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

标签: sed

解决方案


由于您要更改包含 a 的第二列,6并且您有一个逗号作为字段分隔符,因此实际上很容易使用sed

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

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

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

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

然而,使用它更舒服awk

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

推荐阅读