在 bash 中使用 sed 替换 csv 行的第 n 个值

replace nth value of a csv line using sed in bash

我有一些像下面这样的 csv

uid_01, joe, yes, no 
uid_02, sam, yes, maybe
uid_03, c, ruth, yes, maybe
uid_04, **alan**, no, yes

我想把alan换成ruby,这里的uid会是唯一的。我需要根据 $position 进行更改,知道如何在 sed 中获取它吗?

我还想将模式和替换值都作为参数。

尝试过类似的方法,但仅在最后一次输入时有效

sed -i '/^'$uid',/s/[^,]*$/'$returnvalue'/' $OUTPUT

在此先感谢,请帮忙!

awk 更适合:

awk -v id='uid_04' -v repl='ruby' 'BEGIN {FS=OFS=", "}
 == id { = repl} 1' file.csv

uid_01, joe, yes, no
uid_02, sam, yes, maybe
uid_03, c, ruth, yes, maybe
uid_04, ruby, no, yes

这可能对你有用 (GNU sed):

id='uid_04' name='ruby' position=2
sed -i "/^$id,/s/[^,]*/ $name/$position" file

如果 id 是 uid_04 将第二个字段替换为 ruby