如何用不同的字符串替换sed中的匹配组?

时间:2016-04-13 14:56:34

标签: regex sed

我尝试搜索文件并将所有找到的路径替换为HTML文件,并指向文件路径和哈希值。

我想搜索类似的内容:

"

我想替换像这样的文件名:

import re

p = re.compile(r'(?P<prefix>(?:\bu8|\b[LuU])?)(?:"(?P<dbl>[^"\\]*(?:\\.[^"\\]*)*)"|\'(?P<sngl>[^\'\\]*(?:\\.[^\'\\]*)*)\')|R"([^"(]*)\((?P<raw>.*?)\)\4"')
s = "\"text'\\\"here\"\nL'text\\'\"here'\nu8\"text'\\\"here\"\nu'text\\'\"here'\nU\"text'\\\"here\"\nR\"delimiter(text\"'\"here)delimiter\""
print(s)
print('--------- Regex works below ---------')
for x in p.finditer(s):
    if x.group("dbl"):
        print(x.group("dbl"))
    elif x.group("sngl"):
        print(x.group("sngl"))
    else:
        print(x.group("raw"))

我已经看过类似的问题。目前我有一个sed&#39;草稿&#39;,它没有按预期工作:

templateUrl: 'path/to/the/file/file.html';

这将上面提到的字符串替换为templateUrl: 'path/to/the/file/file.HASH.html';

我做错了什么?

2 个答案:

答案 0 :(得分:0)

试试这个:

$ sed 's/^\(templateUrl:.*\)\(\.html\)/\1.HASH\2/' <<< "templateUrl: 'path/to/the/file/file.html';"
templateUrl: 'path/to/the/file/file.HASH.html';

首先从templateUrl:开始.html开始,然后跟踪.html字符串,并在捕获的字符串之间插入.HASH

答案 1 :(得分:0)

请尝试:

echo "templateUrl: 'path/to/the/file/file.html';" |sed -r 's@([^.]+)(.*)@\1.HASH\2@g'
templateUrl: 'path/to/the/file/file.HASH.html';