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

Find and replace HTML in multiple files

我在一家开发 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),忽略其他所有内容,直到它到达结束标记,然后将开始和结束标记替换为 <directive><component-name [everything else]></component-name></directive>.它必须以这种方式完成,因为在某些情况下 <component-name> 在没有 directive 的情况下使用,我不希望这些实例具有 </directive> 结束标记。

我使用 WebStorm 作为我的 IDE,因此可以使用任何 refactoring/find 并替换其中的功能,尽管我对任何可以完成这项工作的终端工具开放。

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

<component-name directive [^.*(?=>)]<\/component-name>

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

总结一下:我需要 <component-name directive [other attributes ignored]></component-name> 替换为 <directive><component-name [other attributes ignored]></component-name></directive>

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

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

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

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

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