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

如何用Bash脚本替换CSV文件中Mr后的姓氏?

批量替换CSV中Mr后的姓氏

问题场景

CSV文件每行包含类似格式的数据:

| 11th October  | 06 6606 1161 | Mr Bean is 43 years old. Mr Bean likes apples. |

需要编写replace_surname.sh脚本,执行replace_surname.sh Smith后,将所有Mr后的姓氏替换为指定新姓氏,结果如下:

| 11th October  | 06 6606 1161 | Mr Smith is 43 years old. Mr Smith likes apples. |

原命令失效原因

你之前使用的sed命令:

sed -i 's/^Mr .*$/Mr PacMan/' test.csv

问题在于^Mr .*$是匹配整行以Mr开头的内容,然后替换整行,但实际数据中Mr处于行的中间位置,完全匹配不到,因此没有效果。

解决方案

正确的sed替换逻辑

使用全局匹配Mr后跟的姓氏(假设姓氏为英文字母组成的单词),并替换为指定新姓氏:

sed -i "s/Mr [A-Za-z]\+/Mr $新姓氏/g" test.csv
  • 用双引号让shell解析变量(比如脚本参数)
  • [A-Za-z]\+匹配任意长度的英文字母姓氏,若姓氏包含连字符、撇号等特殊字符,可修改为[A-Za-z'-]\+
  • g标记表示替换每行中所有匹配的Mr 姓氏

完整的replace_surname.sh脚本

#!/bin/bash

# 校验参数数量
if [ $# -ne 1 ]; then
    echo "用法: $0 <新姓氏>"
    exit 1
fi

# 替换CSV中的姓氏,若需修改目标文件,替换此处的test.csv为你的文件名
sed -i "s/Mr [A-Za-z]\+/Mr $1/g" test.csv

echo "替换完成"

使用说明

  1. 给脚本添加执行权限:chmod +x replace_surname.sh
  2. 执行替换:./replace_surname.sh Smith
  3. 若要保留原文件备份,将sed命令改为sed -i.bak "s/Mr [A-Za-z]\+/Mr $1/g" test.csv,原文件会被保存为test.csv.bak

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:23:26