在 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
我有一些像下面这样的 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