【问题标题】:replace URL using shell script使用 shell 脚本替换 URL
【发布时间】:2011-12-07 04:28:10
【问题描述】:

我在尝试替换一个网址时遇到错误?替换给定目录中所有文件中的 URL 的有效方法是什么。

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

find . -name '*' | xargs sed -i 's/old_url/new_url/g' 不起作用

【问题讨论】:

    标签: perl replace sed


    【解决方案1】:

    或者在你原来的问题中使用find

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

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

    编辑:将 s///gs 更改为 s{}{}g,因为正如 TLP 指出的那样,您正在使用 URL。

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

    【讨论】:

    • 提示:将\; 更改为+ 以避免启动太多perl 实例。 (需要 GNU find。)
    • @ikegami 很好的提示,+1,谢谢。经过多年的 UNIX 经验和无数的find 命令,我从未听说过。 (可能是因为我主要使用 Solaris 工作?)
    • 不,刚刚检查了find 的Solaris 手册页,就在那里,就像白天一样。与往常一样,RTFM...
    【解决方案2】:

    这是一种在 perl 中实现的方法。

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

    【讨论】:

    • 在命令行中也试过 Can't open perl script "s/http:old_url/new_url": No such file or directory
    • 在使用 URL 时,为 s/// 使用另一个分隔符可能是个好主意。
    • @sharp,如果你知道了,你没有使用-e
    • @sharp -i 后面的字符用作(可选)备份文件的扩展名。例如。 -i.bak 创建 file.bak。因此,您不能在 -i 选项之后立即添加其他标志。
    • 任何方式我都可以忽略 .svn 或 .低于错误无法进行就地编辑:./sharp-files/.svn/text-base 不是常规文件。
    【解决方案3】:

    根本问题可能是您指定了类似

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

    这不是一个有效的sedperl 脚本,而且显然很模棱两可。使用在正则表达式或替换中都不存在的替代分隔符;一个流行的选择是!

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

    sedperl 中均有效。

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

    【讨论】:

    • 我对这些荣誉感到满意。很好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多