如何使用Sed命令在Go代码指定行下方追加内容?
解决方案:用Python调用Sed在指定行后添加内容
问题根源
你的原命令因shell解析双引号时的语法冲突出错:拼接后的命令里,双引号被shell当作参数边界,导致sed的匹配规则和追加内容被错误拆分,触发语法错误。同时sed的a命令后需要空格分隔匹配规则与追加内容,原命令缺少该空格。
修正后的实现
方案1:修复os.system调用
用单引号包裹sed的脚本逻辑,避免shell解析双引号,同时给追加内容加上Go代码的缩进以保持格式一致:
import os current_number = '"5",' next_number = ' "6",' # 匹配Go代码的缩进格式 os.system(f"sed -i '/{current_number}/a {next_number}' sample.txt")
如果是macOS等使用BSD sed的系统,需调整-i参数(空字符串表示不生成备份文件):
os.system(f"sed -i '' '/{current_number}/a\\{next_number}' sample.txt")
方案2:使用subprocess模块(推荐)
os.system存在shell注入风险且调试困难,subprocess.run更安全可控:
import subprocess current_number = '"5",' next_number = ' "6",' # GNU sed(Linux/WSL等环境) subprocess.run( ['sed', '-i', f'/{current_number}/a {next_number}', 'sample.txt'], check=True ) # BSD sed(macOS环境) subprocess.run( ['sed', '-i', '', f'/{current_number}/a\\{next_number}', 'sample.txt'], check=True )
效果验证
执行后你的Go代码会被修改为:
func (v version) string(){ vers := [...]string{ "4", "5", "6", //"6", //this should be added "vE", }
内容的提问来源于stack exchange,提问作者Aditya Malviya
相关产品推荐
相关产品推荐

