使用shell脚本替换URL

时间:2011-10-13 18:00:04

标签: perl replace sed

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

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

find . -name '*' | xargs sed -i 's/old_url/new_url/g'无效

3 个答案:

答案 0 :(得分:9)

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

的内容
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,以便在评论中对此进行诊断。如果您发布类似的答案,我会删除此答案。

答案 1 :(得分:2)

这是perl中的一种方法。

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

答案 2 :(得分:1)

或在原始问题中使用find

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

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

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

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