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

sed命令批量编辑CSV追加列时字符串换行问题求助

修正CSV文件追加列的sed命令问题

需要批量给目标目录下的CSV文件添加ORIGIN_FILE和WRITE_DATE两列,但执行原bash命令时,追加的字符串总是出现在新行而非当前行末尾。

输入CSV示例

PRODUCT, QUANTITY, PRICE
ITEM1, 4.8, 380.33
ITEM2, 2.3, 120.50
ITEM3, 1.5, 210.11

原执行命令

find $target_dir -type f -name "*.csv" | parallel sed -i '\'1s/$/,ORIGIN_FILE,WRITE_DATE/; 2,$s/$/,myfilename.csv,2022-11-24/\'' {}'

错误输出

PRODUCT, QUANTITY, PRICE, ORIGIN_FILE, WRITE_DATE
ITEM1, 4.8, 380.33
myfilename.csv, 2022-11-24
ITEM2, 2.3, 120.50
myfilename.csv, 2022-11-24
ITEM3, 1.5, 210.11
myfilename.csv, 2022-11-24

期望输出

PRODUCT, QUANTITY, PRICE, ORIGIN_FILE, WRITE_DATE
ITEM1, 4.8, 380.33, myfilename.csv, 2022-11-24
ITEM2, 2.3, 120.50, myfilename.csv, 2022-11-24
ITEM3, 1.5, 210.11, myfilename.csv, 2022-11-24

修正后的命令

find "$target_dir" -type f -name "*.csv" | parallel sed -i '1s/$/, ORIGIN_FILE, WRITE_DATE/; 2,$s/$/, {/.}, '"$(date +%Y-%m-%d)"'/' {}

关键修正点:

  1. 修复转义混乱:原命令的引号和转义处理错误,导致sed解析时将追加内容拆分为新行。改用单引号直接包裹sed脚本,避免不必要的转义。
  2. 动态获取文件名:用{/.}让parallel自动替换为当前处理文件的文件名(不带路径),替代原命令里的固定值myfilename.csv。
  3. 日期处理:用date +%Y-%m-%d动态生成当前日期,若需要固定日期,直接替换为'2022-11-24'即可。
  4. 格式统一:在追加内容前添加空格,与原CSV的格式保持一致。

内容的提问来源于stack exchange,提问作者Reynaldo Chester Jr. de Alday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:10:27