查找并替换多个文件中的HTML

时间:2018-02-13 10:31:38

标签: html regex webstorm

我在一家开发Angular应用程序的公司工作。我工作的公司内部的组件库已经发布了对HTML标记格式的一些更改。例如,在之前的版本中,这是有效的:

<component-name directive some-other-attribute="" *ngIf=" etc></component-name>

但是,此库的维护者已发布更新,将结构更改为:

<directive><component-name some-other-attribute *ngIf="" etc></component-name></directive>

基本上,最初的指令本身就是一个组件。

我工作的应用程序有100个这样的事件,并且通过它们所有这些都是非常繁琐的工作,需要花费很多时间。是否有正则表达式,我可以匹配原始字符串的第一部分(<component-name directive),忽略其他所有内容,直到它到达结束标记,然后使用{{1}替换起始和结束标记}。它必须以这种方式完成,因为在某些情况下使用<directive><component-name [everything else]></component-name></directive>时没有<component-name>,我不希望这些实例有directive结束标记。

我使用WebStorm作为我的IDE,所以可以在那里使用任何重构/查找和替换功能,虽然我可以使用任何终端工具来完成这项工作。

虽然我知道正则表达式不应该用于anything to do with HTML,但我不确定我还会使用什么(显然,欢迎提出建议/解决方案)。我已经尝试了一些正则表达式(我对这些很垃圾),例如:

</directive>

这里我试图匹配第一部分,并忽略所有内容直到结束标记。但是,我不确定如何用新文本替换匹配(尽管我知道我可以使用WebStorm查找和替换正则表达式来执行此操作)。但是,这并没有奏效。

总结一下:我需要将<component-name directive [^.*(?=>)]<\/component-name> 替换为<component-name directive [other attributes ignored]></component-name>

编辑:虽然我意识到这不是真正的编程,但我不确定在哪里 - 我会发布它。我添加了WebStorm标签并删除了Angular标签,但我愿意使用任何其他工具来完成工作。

1 个答案:

答案 0 :(得分:0)

首先备份您要处理的所有html文件,以防万一!

通常情况下, sed 将在Mac上的命令行提示符处可用。

所以试试这个,假设你要编辑的所有文件都在同一个目录中,并且名字中有一个html扩展名,并假设<component-name>的开始和结束标记在同一行:

sed -i 's/\(<component-name \)directive \([^<]*<\/component-name>\)/<directive>\1\2<\/directive>/' *.html