使用 shell 脚本替换 URL

发布于 2024-12-09 14:01:10 字数 206 浏览 1 评论 0原文

当我尝试替换一个网址时出现以下错误?替换给定目录中所有文件中的 URL 的有效方法是什么?

sed: -e expression #1, char 62: unknown option to `s'

<代码>查找 . -名称 '*' | xargs sed -i 's/old_url/new_url/g' 不起作用

I am getting below error while I try to replace one url? What is the efficient way to replace URL in all files in a give directory.

sed: -e expression #1, char 62: unknown option to `s'

find . -name '*' | xargs sed -i 's/old_url/new_url/g' did not work

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

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

发布评论

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

评论(3

饮惑 2024-12-16 14:01:10

根本问题可能是您指定的内容

s/http://example.com/ick/poo/http://example.net/also/not/

不是有效的 sed 或 perl 脚本,而且显然相当不明确。使用不在正则表达式或替换中任何地方的备用分隔符;一个流行的选择是!

s!http://example.com/ick/poo!http://example.net/also/not!

这在 sedperl 中都有效。

编辑 感谢@TLP 在评论中也对此进行了诊断。如果您发布类似的答案,我将删除此答案。

The fundamental problem is probably that you are specifying something like

s/http://example.com/ick/poo/http://example.net/also/not/

which is not a valid sed or perl script, and obviously quite ambiguous. Use an alternate separator which is not anywhere in either the regular expression or in the replacement; a popular choice is !

s!http://example.com/ick/poo!http://example.net/also/not!

which is valid in both sed and perl.

Edit Kudos to @TLP for also diagnosing this in a comment. I'll remove this answer if you post a similar one.

谷夏 2024-12-16 14:01:10

这是在 Perl 中执行此操作的一种方法。

cd directory
perl -pi -e 's!old_url!new_url!g;' *

Here's a way to do it in perl.

cd directory
perl -pi -e 's!old_url!new_url!g;' *
别闹i 2024-12-16 14:01:10

或者使用 find 就像你原来的问题一样:

find . -type f -exec perl -pi -e 's{old_url}{new_url}g' {} +

如果 Perl 告诉你“没有这样的文件或目录”,那可能是因为你不小心省略了 -e

编辑:改变了< code>s///gs 到 s{}{}g 因为,正如 TLP 指出的,您正在使用 URL。

编辑:根据 ikegami 的建议将 \; 更改为 +

Or using find as in your original question:

find . -type f -exec perl -pi -e 's{old_url}{new_url}g' {} +

And if Perl is telling you "no such file or directory," it's probably because you accidentally omitted the -e

EDIT: changed s///gs to s{}{}g since, as TLP pointed out, you're working with URLs.

EDIT: changed \; to + per ikegami's suggestion.

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