用于编辑大量 html 文档的 Bash 脚本

用于编辑大量 html 文档的 Bash 脚本

我有一个包含许多 HTML 文档的目录。其中大多数包含代码块

      .org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

标签内<style type="text/css">。我想编写一个脚本来删除text-decoration: underline;每个文件中该块中的行。

通常我会编写一行sedperl一行来简单地删除该行的每个实例,text-decoration: underline;但许多文档都有text-decoration: underline我没有删除的该行的其他实例。

linux中有没有一个工具可以轻松做到这一点?

答案1

尝试这个:

sed '/.org-link {/,/}/{/text-decoration: underline;/d}' file

输出:

      .org-链接{
        /* 组织链接 */
        颜色:#b58900;
        字体粗细:粗体;
      }

要“就地”编辑文件:

sed -i '/.org-link {/,/}/{/text-decoration: underline;/d}' file

答案2

使用gawk

gawk -i inplace '/.org-link {/,/}/ {if($0~/text-decoration: underline/) next} {print}' infile

这将仅删除类text-decoration: underline中的属性.org-link

user@debian ~ % cat infile
.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

.org-link1 {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }
user@debian ~ % gawk -i inplace '/.org-link {/,/}/ {if($0~/text-decoration: underline/) next} {print}' infile
user@debian ~ % cat infile
.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
      }

.org-link1 {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
      }

要在同一工作目录中的多个 HTML 文件上循环,您可以使用bash for带有通配符的循环:

for f in *.html; do gawk -i inplace '/.org-link {/,/}/ {if($0~/text-decoration: underline/) next} {print}' "$f"; done

相关内容