正则表达式搜索取代CSS

时间:2018-06-06 00:37:53

标签: 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!

2 个答案:

答案 0 :(得分:0)

如果您使用的是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
}

<强>说明:

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

答案 1 :(得分:0)

您需要关注{}。我理解你需要这种模式的字符串组selector(s){properties}。正则表达式(.+)\{((.+):(.+))+\}。使用此表达式,您将获得此模式的匹配组的字符串数组(假设其名称为g1)。现在,在所有这些组中,您必须过滤掉位于不同行上的属性。您可以使用两种类型的过滤器

  1. 换行符(\ n)
  2. Semi Colon(。)
  3. 正则表达式((.+):(.+)(\n|;))+将给出选择器内的所有属性(或者换句话说,在大括号{all properties}内)。现在是属性中的颜色模式。正则表达式(#{1}(.)+)*将在属性中提供所有颜色值。现在检查选择器内属性的这个值的字符串是否与您的任何属性值(#363b37,#74a5bf,#6c9ab2,#6995ad,#6691a8或#4c698c)匹配,并采取您问题中指定的相应操作。如果颜色值字符串比较对于集合中的任何值返回true,则保留该属性。如果在选择器内部获得与任何颜色值匹配的属性,请保留选择器。丢弃与所有颜色值不匹配的属性和没有属性的选择器。