我在尝试更换一个网址时遇到错误?替换给定目录中所有文件中URL的有效方法是什么。
sed: -e expression #1, char 62: unknown option to `s'
find . -name '*' | xargs sed -i 's/old_url/new_url/g'
无效
答案 0 :(得分:9)
根本问题可能是您指定了类似
的内容s/http://example.com/ick/poo/http://example.net/also/not/
这不是有效的sed
或perl
脚本,显然很模糊。使用备用分隔符,该分隔符不在正则表达式中或替换中的任何位置;一个受欢迎的选择!
s!http://example.com/ick/poo!http://example.net/also/not!
在sed
和perl
都有效。
编辑赞美@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的建议将\;
更改为+
。