如何将逗号分隔行的第二个字段替换为变量b中存储的值?
解决逗号分隔文件替换第二个字段的问题
你的sed命令失效有两个核心原因:
- 单引号
'会阻止shell解析变量$b,变量无法替换成实际值 - sed里的
$2不是指代第二个字段,$在sed正则里表示行尾,$2属于语法错误
正确的sed命令
先确保变量b已经赋值,比如:
b="10:00:00.000"
然后执行:
sed "s/^\([^,]*,\)[^,]*/\1$b/" abc.csv
正则说明:
^匹配行的起始位置\([^,]*,\)捕获第一个字段及后面的逗号,保存为第1个分组[^,]*匹配第二个字段(所有非逗号字符)- 替换为第1个分组的内容 + 变量
b的值
更直观的awk方案
awk天生适合处理分隔字段的文本,写法更清晰:
awk -v new_val="$b" -F ',' '{$2=new_val; print}' OFS=',' abc.csv
参数说明:
-v new_val="$b"将shell变量b传递给awk内部的new_val变量-F ','指定输入分隔符为逗号$2=new_val修改第二个字段的值OFS=','设置输出分隔符为逗号,保证输出还是逗号分隔格式
内容的提问来源于stack exchange,提问作者Abhinandan Kumar
相关产品推荐
相关产品推荐

