多くのHTML文書を含むディレクトリがあります。ほとんどはコードブロックを含みます。
.org-link {
/* org-link */
color: #b58900;
font-weight: bold;
text-decoration: underline;
}
ラベル内で<style type="text/css">
。text-decoration: underline;
各ファイルの対応するブロックの行を削除するスクリプトを作成したいと思います。
通常、私はその行のすべてのインスタンスを削除するために1行sed
または複数行を作成しますが、多くの文書には削除しなかったその行の他のインスタンスがあります。perl
text-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