繁体   English   中英

在 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

我想用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM