问题:
我是 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</ke ...”:替代命令中的错误标志:'}'
- 我在第一个代码中犯了很多错误。
- 没有逃脱'+'
- 应该以 2/} 结尾”
- 实际上应该以 2/;}" 结尾(我错过了一个 ';',所以我在提示 1 中遇到了第二个错误)
- 用户 'n' 或 'N' 都适用于我。
- 可能是因为在 Mac 上,'.+'(即使我逃脱了)不起作用,所以必须按照@potong 所说的那样更改它,'..*'
欢迎任何好的建议来批准代码,再次感谢以下所有人!