无法在 OSX 中使用 sed 在模式后添加一行文本

Posted

技术标签:

【中文标题】无法在 OSX 中使用 sed 在模式后添加一行文本【英文标题】:Not able to add a line of text after pattern using sed in OSX 【发布时间】:2021-11-12 13:10:38 【问题描述】:

我正在尝试使用我的脚本在文件afile.xyz 中添加一行。这是我迄今为止使用 sed 所做的:

n="$(grep ".method" "$m" | grep "onCreate(Landroid/os/Bundle;)V")"

sed -i '' -e '/$n/ a\
"test", /Users/username/Documents/afile.xyz

我收到了错误:

"onCreate\(\Landroid\/ ...": bad flag in substitute command: 'g'

我该如何解决这个问题?请帮忙。谢谢。

编辑:n 的内容

method protected onCreate(Landroid/os/Bundle;)V

【问题讨论】:

显示n的内容是什么,并修复不平衡的'(单引号) 我已经更新了帖子先生。请帮忙。 您的问题有很多不一致之处。使用'/$n/ ...'(注意单引号)你不应该得到错误。另外$n的值不能以method开头,因为你是通过搜索.method得到的。 【参考方案1】:

2 个问题:

    因为 sed 正文是单引号,所以变量 $n不会被扩展, $n 中的正则表达式包含/ 分隔符。

试试这个:

n=$(...)
nn=$n//\//\\/    # escape all slashes

sed -i '' '/'"$nn"'/ a ...

单引号的 sed 主体被打断以附加双引号的 shell 变量。

【讨论】:

【参考方案2】:

您还可以为 RE 使用不同的分隔符:


sed -i '' -e "\#$n# a\\
\"test\"" /Users/username/Documents/afile.xyz

【讨论】:

以上是关于无法在 OSX 中使用 sed 在模式后添加一行文本的主要内容,如果未能解决你的问题,请参考以下文章

linux下的sed命令小结

Sed命令

Sed文本处理工具

三剑客之Sed

12文本处理工具sed

在 AIX 服务器中使用 Sed -i 选项。函数无法解析 aix