无法在 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 在模式后添加一行文本的主要内容,如果未能解决你的问题,请参考以下文章