在第二对括号后Grep表示值

时间:2017-07-25 20:36:20

标签: bash search grep cut

给定一个如下所示的文件:

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

4 个答案:

答案 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