复杂批量替换linux

时间:2009-11-17 18:38:07

标签: regex batch-file replace

我正在尝试使用相当复杂的模式进行一些批量替换

到目前为止,我发现模式为:

find '(' -name '*.php' -o -name '*.html' ')' -exec grep -i -n 'hello' {} +

我想要替换的字符串目前如下:

<img src="/some/path/to/somewhere/hello" /> 

图像的路径不同但总是在末尾包含子字符串“hello”

我想抓住路径并执行替换,如下所示:

<img src="<?php myfunction('(/some/path/to/somewhere/)'); ?>" /> 

执行此操作的好方法是什么?

任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

-exec grep .....替换为

-exec cat '{}' | sed s/<img src="(/some/path/to/somewhere/)hello" />/<img src="<?php myfunction('(\1)(constant)'); ?>" />/ > /tmp/output; mv /tmp/output '{}' ';'

转义空格,“和sed的搜索和替换模式中的/符号与sed喜欢的backslahes。

例如,这将提取/ path /:

echo "<img src=\"/path/hello\"" | sed "s/<img\ src=\"\(\/path\/\)hello/\1/"