Linux 使用许多HTML文件中的第一个重命名HTML文件<;h2>;标记,如果包含正斜杠,则将其替换为连字符

Linux 使用许多HTML文件中的第一个重命名HTML文件<;h2>;标记,如果包含正斜杠,则将其替换为连字符,linux,bash,file-rename,Linux,Bash,File Rename,我有一个包含大量html文件的文件夹: SMG6E30A14100000000DAAT00.html SMB6E30A14400000000DAAT00.html SMA6E30A14400120000DAAT00.html 等等 我想根据每个文件中的第一个h2标记重命名每个文件,如果标记包含正斜杠,则斜杠应替换为连字符 因此,如果SMG6E30A14100000000DAAT00.html包含 进行维修或保养前,侧面碰撞/传感器(第二次)的更换和SRS中的。注意:检查前排座椅安全带是否损坏

我有一个包含大量html文件的文件夹:

  • SMG6E30A14100000000DAAT00.html
  • SMB6E30A14400000000DAAT00.html
  • SMA6E30A14400120000DAAT00.html
  • 等等
我想根据每个文件中的第一个
h2
标记重命名每个文件,如果标记包含正斜杠,则斜杠应替换为连字符

因此,如果SMG6E30A14100000000DAAT00.html包含

进行维修或保养前,侧面碰撞/传感器(第二次)的更换和SRS中的。

注意:检查前排座椅安全带是否损坏,必要时予以更换。在拆卸和安装过程中小心不要损坏它们。

前排座椅安全带 相应地重命名为Front Seat Belt Replacement.html


如何在linux上执行此操作?

以下命令返回
test.html
所需的文件名

< ./test.html tr -d '\n' | grep -oP -m 1 '(?<=<h2>).*?(?=</h2>)' | head -1 | tr '/' '-'

<./test.html tr-d'\n'| grep-oP-m1'(?它正在工作,但有一个“bug”,如果filename.html不包含h2标记,则会将其删除。它可能会保留这些文件名。根据您的规范,我假设所有文件都包含必要的标记。但是,如果不是在所有情况下都为true,则可以检查newname变量的长度,并仅在newname不为空时才进行重命名。
for filename in ./input/*.html; do

    newname=$(< ${filename} tr -d '\n' | grep -oP -m 1 '(?<=<h2>).*?(?=</h2>)' | head -1 | tr '/' '-')
    mv ${filename} "./output/${newname}.html"

done