[英]Sed Regex OSX find Roman numerals and replace with empty string. Error “unterminated substitute pattern”
[英]sed error unterminated substitute pattern for new line text
我正在编写一个脚本,将新的依赖项添加到监视列表。 我正在放置一个占位符以了解在何处添加文本,例如
assets = [
"../../new_app/assets"
# [[NEW_APP_ADD_ASSETS]]
]
仅替换占位符很简单,但是我的问题是在前一行添加逗号。
如果我搜索并替换可以完成
"
# [[NEW_APP_ADD_ASSETS]]
即"\\n # [[NEW_APP_ADD_ASSETS]]
我无法搜索新行。
我找到的添加新行的解决方案之一是
sed -i '' 's/newline/line one\
line two/' filename.txt
但是当对搜索字符串执行相同的方法时,它返回:unterminated substitute pattern
sed -i '' s/'assets\"\
#'/'some new text'/ filename.txt
PS:我在macOS上写作
Sed在逐行的基础上工作,因此将昏迷添加到前一行很困难,因为该行已经被处理过。 可能,但是sed
语法很快变得混乱。
更具体一点:
在默认操作中, sed周期性地将输入行(减去其终止<newline>字符)附加到模式空间中 。 如果在
D
命令结束前一个循环之前,在模式空间中有<newline>,则应跳过从输入的读取。 然后,sed实用程序应按顺序应用地址选择该模式空间的所有命令,直到命令开始下一个周期或退出为止。 如果没有命令明确地开始一个新的循环,那么在脚本结尾,应将模式空间复制到标准输出 (指定-n
时除外), 并应删除模式空间 。 每当将模式空间写入标准输出或命名文件时,sed应立即在其后跟一个<newline>。
简而言之,如果您不操纵模式空间 ,就不能处理<newline>字符,因为它们不会出现!
更短的是,如果仅使用替代命令,则sed一次只能处理一行!
这也是您遭受苦难的原因: unterminated substitute pattern
。 您正在搜索换行符,但是sed一次只能读取一行,因此找不到它,也不会期望它。 如果将换行符替换为\\n
则错误将消失。
sed -i '' s/'assets\"\n #'/'some new text'/ filename.txt
实现目标的更好方法是利用awk
。 它更具可读性:
awk '/# [[NEW_APP_ADD_ASSETS]]/{ print t","; t="line1\nline2"; next }
{ print t; t=$0 }
END{ print t }' <file>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.