You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅对CSV文件的第3、4列执行指定内容的搜索替换操作

CSV指定列搜索替换方案

处理按列替换需求时,awk 比 sed 更适配,它天然支持字段级别的操作,不会影响其他列内容,以下是适配你需求的实现:

1. 适配场景说明

如果你的文件是标准逗号分隔CSV,直接使用下方方案;如果是多空格/制表符分隔的类CSV格式,仅需调整命令中的输入输出分隔符即可。

2. 具体执行命令

单命令行版本(直接运行)

标准逗号分隔CSV用这个:

awk 'BEGIN{FS=OFS=","} NR==1{print;next} {sub(/stack\.overflow2/,"prince.caballero",$3);sub(/stack\.overflow/,"macy.greytold",$3);sub(/stack\.overflow2/,"prince.caballero",$4);sub(/stack\.overflow/,"macy.greytold",$4);print}' 你的文件名.csv > 输出文件名.csv

你示例里的多空格分隔格式用这个:

awk 'BEGIN{FS="[[:space:]]+";OFS="\t"} NR==1{print;next} {sub(/stack\.overflow2/,"prince.caballero",$3);sub(/stack\.overflow/,"macy.greytold",$3);sub(/stack\.overflow2/,"prince.caballero",$4);sub(/stack\.overflow/,"macy.greytold",$4);print}' 你的文件名.csv > 输出文件名.csv

3. 命令说明

  • BEGIN{FS=OFS=","}:预处理阶段设置输入分隔符(FS)和输出分隔符(OFS)为逗号,多空格场景下FS设为匹配任意连续空白的正则[[:space:]]+即可
  • NR==1{print;next}:第一行是表头直接输出,不做替换处理
  • sub(匹配规则,替换内容,目标字段):仅对指定的第3、第4字段做替换,其他字段完全保留原始内容
  • 注意正则中的.需要加转义符\,避免匹配任意字符

可选:sed实现方案

如果必须用sed实现,需要写正则锁定前两列后再处理3、4列,以逗号分隔CSV为例,命令如下:

sed -E '
# 跳过表头行
1!{
    # 替换第3列匹配内容
    s/^(([^,]+,){2})stack\.overflow2,/\1prince.caballero,/
    s/^(([^,]+,){2})stack\.overflow,/\1macy.greytold,/
    # 替换第4列匹配内容
    s/^(([^,]+,){3})stack\.overflow2,/\1prince.caballero,/
    s/^(([^,]+,){3})stack\.overflow,/\1macy.greytold,/
}
' 你的文件名.csv > 输出文件名.csv

sed方案对分隔符格式要求更严格,不如awk方案灵活,更推荐优先使用awk方案。

内容的提问来源于stack exchange,提问作者mac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:15:08