我正在尝试使用相当复杂的模式进行一些批量替换
到目前为止,我发现模式为:
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/)'); ?>" />
执行此操作的好方法是什么?
任何帮助都会受到赞赏。
答案 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/"