【发布时间】:2012-12-18 09:40:32
【问题描述】:
问题:
我是sed新手,所以当我在shell中执行以下代码时:
sed -e "/^\s<key>CHANNEL_NAME<\/key>$/{N;s/\(^\s<string>\).+\(<\/string>$\)/\1test\2}" Info.plist > test.plist
Sed 给我一个错误:“sed: 1: "/^\sCHANNEL_NAME
我的问题:“替代模式内未转义的换行符”到底是什么意思?
Info.plist 文件是这样的:
...
<key>CHANNEL_NAME</key>
<string>App Store</string>
...
感谢大家回答问题,谢谢!
回答者:
感谢@potong @dogbane @Beta! :)
因为它是一个 Cocoa plist,所以这是我的最终解决方案:
sed '/<key>CHANNEL_NAME<\/key>/{N;s/\(<string>\).*\(<\/string>\)/\1test\2/;}' Info.plist > test.plist
提示:
- 我在解决问题的过程中遇到了两个错误。把它们放在这里:
- sed: 1: "/^\sCHANNEL_NAME
- sed: 1: "/CHANNEL_NAME...": 替换命令中的错误标志:'}'
- 我在第一个代码中犯了很多错误。
- 没有逃脱'+'
- 应该以 2/}" 结尾
- 实际上应该以 2/;}" 结尾(我错过了一个 ';',所以我在提示 1 中遇到了第二个错误)
- 用户“n”或“N”都适用于我。
- 可能是因为在 Mac 上,'.+'(即使我逃脱了)不起作用,所以必须按照@potong 所说的那样更改它,'..*'
欢迎任何好的建议来批准代码,再次感谢以下所有人!
【问题讨论】:
-
我无法重现此错误。但是您的
sed表达式还有其他问题。您还没有逃脱+并且缺少一个斜杠来终止s命令,即它应该以2/}"结尾。 -
@dogbane 非常感谢。这是一个错误的输入,但问题不是表达。恩,你的操作系统是什么? Linux 还是 Mac?
-
我可以重现错误(在 Mac 上),当我更正
+并使用2/;}终止命令时,替换工作。
标签: regex bash shell sed plist