awk从CSS文件中获取colo(u)r代码,也就是在Awk中学习我

时间:2010-04-02 16:00:26

标签: css regex awk

很好,(希望)很容易。我试图找出如何从包含像

这样的字符串的文本文件(css文件)中获取变量#XXX
  

hr { margin: 18px 0 17px; border-color: #ccc; }

     

h1 a:hover, h2 a:hover, h3 a:hover { color: #001100; }

我希望将其作为

返回
  

ccc

     

001100

然后计划通过sort和uniq抛出这个,最后得到页面的定义colourscheme。

基本上,我无法弄清楚如何从匹配/color:#... [...。] /到打印出通配符部分。

3 个答案:

答案 0 :(得分:1)

sed -n '/color/ s/.*color: *#\([^;]\+\);.*/\1/p' css_file

您可以添加一些可选的空格:

sed -n '/color/ s/.*color:[[:space:]]*#[[:space:]]*\([[:xdigit:]]\+\)[[:space:]]*;.*/\1/p'

答案 1 :(得分:1)

{ 
  RS = "[^ ]*color[ \t\r\n\f]*:[ \t\r\n\f]*" ;

  if (NR > 1) {
    match($0, "#[0-9A-Fa-f]+|rgb.*\)|[a-zA-Z]+") ;

    if (RSTART != 0)
      str = substr($0, RSTART, RLENGTH) ;
      gsub("[ \t\r\n\f]", "", str) ;
      print str ;
  }
}

尝试创建防弹且强大的AWK代码。不是单行,但即使在一些严重混乱的输入中也可以存活。

测试输入:

    hr { margin: 18px 0 17px; border-color: 
#ccc; }

    h1 a:hover, h2 a:hover, h3 a:hover { color: rgb ( 123, 

123, 123) }

    h1 a:hover, h2 a:hover, h3 a:hover { color: red }

    h1 a:hover, h2 a:hover, h3 a:hover { color: #001100; }

输出:

#ccc
rgb(123,123,123)
red
#001100

答案 2 :(得分:0)

这是awk的两种可能(也更容易阅读)方式

awk -F"#" '/color/{sub(";.*","",$NF);print $NF}' file

awk -vFS="#|; *}" '/color/{print $2}' file