sed 失败并显示“‘s’的选项未知”错误

发布于 2025-01-07 23:08:15 字数 1819 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把回忆走一遍 2025-01-14 23:08:15

问题出在斜杠上:你的变量包含它们,最终的命令将类似于 sed "s/string/path/to/something/g" ,包含太多斜杠。

由于 sed 可以将任何字符作为分隔符(无需声明新的分隔符),因此您可以尝试使用替换字符串中未出现的另一个字符:

replacement="/my/path"
sed --expression "s@pattern@$replacement@"

请注意,这不是防弹的:如果替换字符串稍后包含 @ ,它会因同样的原因而中断,并且任何反斜杠序列如 \1 仍将根据 sed 规则进行解释。使用 | 作为分隔符也是一个不错的选择,因为它的可读性与 / 类似。

The problem is with slashes: your variable contains them and the final command will be something like sed "s/string/path/to/something/g", containing way too many slashes.

Since sed can take any char as delimiter (without having to declare the new delimiter), you can try using another one that doesn't appear in your replacement string:

replacement="/my/path"
sed --expression "s@pattern@$replacement@"

Note that this is not bullet proof: if the replacement string later contains @ it will break for the same reason, and any backslash sequences like \1 will still be interpreted according to sed rules. Using | as a delimiter is also a nice option as it is similar in readability to /.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文