我有一个包含许多 HTML 文档的目录。其中大多数包含代码块
.org-link {
/* org-link */
color: #b58900;
font-weight: bold;
text-decoration: underline;
}
标签内<style type="text/css">
。我想编写一个脚本来删除text-decoration: underline;
每个文件中该块中的行。
通常我会编写一行sed
或perl
一行来简单地删除该行的每个实例,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