[英]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
我想用ruby替换alan ,uid 在这里是唯一的。 我需要根据 $position 进行更改,知道如何在 sed 中获取它吗?
我还想将模式和替换值都指定为 arguments。
尝试过这样的事情,但只在最后一次进入时工作
sed -i '/^'$uid',/s/[^,]*$/'$returnvalue'/' $OUTPUT
在此先感谢,请帮忙!
awk
更适合它:
awk -v id='uid_04' -v repl='ruby' 'BEGIN {FS=OFS=", "}
$1 == id {$2 = 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.