给定一个如下所示的文件:
0,0: (63736) #F8F8F8 gray(248)
1,0: (63736) #F8F8F8 gray(248)
2,0: (63736) #F8F8F8 gray(248)
3,0: (63736) #F8F8F8 gray(248)
4,0: (63736) #F8F8F8 gray(248)
5,0: (63736) #F8F8F8 gray(248)
6,0: (63736) #F8F8F8 gray(248)
7,0: (63736) #F8F8F8 gray(248)
8,0: (63736) #F8F8F8 gray(248)
一路走到“799,599:”。我需要在以“590,85:”开头的行的灰色括号之间的数字。
输出应该是,例如,如果我想要来自“7,0:”;
的数据248
答案 0 :(得分:2)
在sed中它将是:
$ sed -n 's/^7,0:.*(\([^)]*\).*/\1/p' file
248
但保持简单,只需使用awk:
$ awk -F'[()]' '/^7,0:/{print $4}' file
248
答案 1 :(得分:1)
grep ^590,85: filename | cut -f3 -d'(' | cut -f1 -d')'
grep
选择该行,cut将该行拆分为给定分隔符(-d
)上的列,并返回给定的列(-f
)。
答案 2 :(得分:1)
使用sed
:
sed -nE '/^590,85:/ s/.*gray\(([0-9]+)\)/\1/ p' file
对于以590,85:
开头的行,我们匹配括号内的数字,并用该数字替换整行,打印它(并使用-n
抑制所有不匹配行的输出)。扩展的正则表达式使用-E
启用。
为完整起见,如果您更喜欢POSIX基本正则表达式(BRE):
sed -n '/^590,85:/ s/.*gray(\([0-9][0-9]*\))/\1/ p' log
请注意,现在我们必须转义分组的parens(我们不会逃避文字的parens),也是为了模拟至少一次出现的运算符(+
),我们必须将其分解为[0-9]
,后跟数字[0-9]*
上的零或多次出现运算符。如果使用GNU sed
,您可以使用\+
(转义为+
)。
你也可以在比赛结束时锚定比赛(由评论中的@David建议),并跳过gray
前缀的匹配:
sed -n '/^590,85:/ s/.*(\([0-9][0-9]*\))$/\1/ p' log
答案 3 :(得分:0)
您可以grep
您感兴趣的行,并再次使用grep
来提取值:
grep '^7,0:' /tmp/filename| grep -Po '\(\K\d+(?=\)$)'
248