css - 正则表达式搜索替换 CSS

标签 css regex linux replace css-selectors

我正在使用 NotepadQQ(Notepadd++ 的 Linux 风格)并且有一个超过 5,500 行长的 CSS 文件。我对正则表达式的了解仅限于最基础的内容。

我需要搜索并删除不包含某些十六进制颜色代码的所有内容。

CSS 示例如下所示:

section[id*='rss-'] ul>li .rssSummary {
color:#353535;
padding-left:10px
}

.follow_me .side_body ul li a.sm {
-webkit-transition:background,.5s,ease;
-moz-transition:background,.5s,ease;
transition:background,.5s,ease;
border-radius:50%;
border:3px solid #363b37;
display:block;
height:57px;
margin:0 10px 10px 0;
text-align:center;
width:57px
}

.follow_me .side_body ul li a.sm span {
color:#363b37;
display:block;
font-family:'squared-icomoon';
font-size:40px;
height:57px;
line-height:57px;
width:57px
}

.follow_me .side_body ul li a.fb:hover {
border-color:#4c698c !important;
background:#4c698c
}

.follow_me .side_body ul li a.twitter:hover {
border-color:#00aced !important;
background:#00aced
}

但必须如此

.follow_me .side_body ul li a.sm {
border:3px solid #363b37;
}

.follow_me .side_body ul li a.sm span {
color:#363b37;
}

.follow_me .side_body ul li a.fb:hover {
border-color:#4c698c !important;
background:#4c698c
}

如果选择器包含任何具有特定颜色的属性线(#363b37#74a5bf#6c9ab2#6995ad#6691a8#4c698c),选择器以及那些属性和值应该保留。

如果选择器不包含任何这些颜色值,则应将其整个删除。

如果属性不包含任何这些颜色值,则应删除整行。

是否可以在搜索和替换中使用正则表达式?如果可以,如何实现? TIA!

最佳答案

如果您在 Linux 上工作,您可以使用以下使用 awk 命令的快速但粗略的解决方案来完成此任务:

awk '/{/{buffer=$0; inside=1;}{if(inside){if($0 ~ /#[abcdefABCDEF0-9]+/)buffer=buffer ORS $0}else print}/}/{inside=0;print buffer ORS "}";}' input.css 
section[id*='rss-'] ul>li .rssSummary {
color:#353535;
}

.follow_me .side_body ul li a.sm {
border:3px solid #363b37;
}

.follow_me .side_body ul li a.sm span {
color:#363b37;
}

.follow_me .side_body ul li a.fb:hover {
border-color:#4c698c !important;
background:#4c698c
}

.follow_me .side_body ul li a.twitter:hover {
border-color:#00aced !important;
background:#00aced
}

解释:

  • /{/{缓冲区=$0; inside=1;} 当到达包含 { 的行时重置缓冲区并将 inside 设置为 1
  • {if(inside){if($0 ~/#[abcdefABCDEF0-9]+/)buffer=buffer ORS $0}else print} 如果 inside 为 1,则检查该行是否包含颜色代码(hex 仅在示例中考虑,但可以适应 RGB),如果是,则将其添加到缓冲区,如果我们不是“里面”只是打印行。
  • /}/{inside=0;print buffer ORS "}"; 当我们到达右括号时,我们打印缓冲区的内容
  • 然后您可以将输出重定向到另一个 css 文件。

关于css - 正则表达式搜索替换 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710746/

相关文章:

正则表达式 [[ :digit:]] showing a row with a letter between digits

c# - 将斜杠添加到自关闭标签

c++ - 为什么在调用recv系统调用时会调用sigprocmask?

linux - 使用 unix 排序对字母数字进行排序

android - 更改 EditText setError() 的字体系列

javascript - jQuery 在所有事件的 CSS 转换完成后计算宽度和高度

用于每四个字符拆分的 Ruby 正则表达式不起作用

linux - 监控和日志记录/dev/pts/1,linux下

javascript - 使用移动的 div 作为 CSS 剪辑路径

jquery - 需要帮助将 for 循环/if 语句转换为 jQuery 选择器