大量のHTML文書を編集するためのBashスクリプト

大量のHTML文書を編集するためのBashスクリプト

多くのHTML文書を含むディレクトリがあります。ほとんどはコードブロックを含みます。

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

ラベル内で<style type="text/css">text-decoration: underline;各ファイルの対応するブロックの行を削除するスクリプトを作成したいと思います。

通常、私はその行のすべてのインスタンスを削除するために1行sedまたは複数行を作成しますが、多くの文書には削除しなかったその行の他のインスタンスがあります。perltext-decoration: underline;text-decoration: underline

これを簡単に実行できるツールはLinuxにありますか?

答え1

この試み:

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

出力:

      .org-link{
        /*組織リンク*/
        色:#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

関連情報