使用gawk / awk提取模式数据

时间:2014-04-05 03:34:02

标签: awk gawk

我有一个输入文字如下:

 10779: (255,255,  0,255) #FFFF00 yellow
   338: (255,238,125,255) #FFEE00 srgba(255,238,125,1)
   180: (238,221,  0,255) #EEDD00 srgba(238,221,0,1)
 ....

我希望输出

 255,255,0,255    
 255,238,125,255    
 238,211,0,255

如何使用gawk / awk从输入中提取此数据?我试过这个:

gawk 'BEGIN {FS=\"[:,()]\"};{print $3,$4,$5,$6}'

但是这给了我数据之间的空间,例如 255 255 0 255

4 个答案:

答案 0 :(得分:3)

根据您的输入,我猜这可能有效

awk -F'[()]' '{gsub(/ /,"",$2); print $2}' file
255,255,0,255
255,238,125,255
238,221,0,255

答案 1 :(得分:1)

使用perl:

perl -lne 'print $1 if(/\((.*?)\)/)'

如果你不想要那些空格,那么:

perl -lne '$a=$1 if(/\((.*?)\)/);$a=~s/ //g;print $a'

awk中:

awk '{a=index($0,"(");b=index($0,")");a++;b--;print substr($0,a,b-a)}'

Tested

答案 2 :(得分:1)

awk的另一种方式:

$ awk -F'[(#]' 'gsub(/[ )]/,"")&&$0=$2' file
255,255,0,255
255,238,125,255
238,221,0,255

答案 3 :(得分:1)

sed解决方案,适用于各种:

sed -E 's/^.+\(([^)]+)\).+$/\1/; s/ //g' file

或者,一次一步,cuttr

cut -d '(' -f 2 file | cut -d ')' -f 1 | tr -d ' '