我有一个输入文字如下:
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
答案 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)}'
答案 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
或者,一次一步,cut
和tr
:
cut -d '(' -f 2 file | cut -d ')' -f 1 | tr -d ' '