如何在shell脚本中替换以指定标识开头的行内特定字符串
实现方案
核心命令
sed天然支持按行规则匹配后执行操作,可以精准实现你的需求,不会改动其他行的内容:
- 仅打印修改后的结果,不改动原文件,可用于效果验证:
sed '/^A=/s/Mary/Maria/' 你的目标文件名 - 直接修改原文件(Linux系统通用的GNU sed版本):
sed -i '/^A=/s/Mary/Maria/' 你的目标文件名 - 直接修改原文件(macOS系统自带的BSD sed版本):
sed -i '' '/^A=/s/Mary/Maria/' 你的目标文件名
如果你的行首标识仅为单个A,没有后续的等号,将上述命令中的
/^A=/改为/^A/即可。
如果单个A开头的行中存在多个Mary需要全部替换,将替换规则改为s/Mary/Maria/g即可。
命令原理
/^A=/是行匹配规则,仅筛选行首为A=的行做处理,其他行直接跳过,完全适配你不按行号匹配、仅靠行首标识定位的要求s/Mary/Maria/是替换规则,仅在匹配到的行中执行替换操作,因此D开头行包含的Mary不会被修改
可执行shell脚本示例
你可以写成通用脚本直接调用,自动兼容Linux和macOS环境:
#!/bin/bash # 替换为你实际的文件路径 TARGET_FILE="/data/your_target_file.txt" # 自动适配不同sed版本执行替换 if sed --version 2>/dev/null | grep -q "GNU sed"; then sed -i '/^A=/s/Mary/Maria/' "$TARGET_FILE" else sed -i '' '/^A=/s/Mary/Maria/' "$TARGET_FILE" fi
给脚本添加执行权限即可运行:chmod +x replace_mary.sh
内容的提问来源于stack exchange,提问作者Shubhro
相关产品推荐
相关产品推荐

