如何使用 sed/grep/cut 提取两个括号之间的数字?

How to use sed/grep/cut to extract numericals between two brackets?

我有一个文件,结果如下:

   7499 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 4)
   50 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 42)
   50 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 29)
   41 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 11)
   23 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 4)
   3 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 5)
   100330 (map g (range 1 1000)),(2 2 4 4 4 4 4 4 6)

我是 sed 的新手,还没有得到我想要的输出,我希望是:

2 2 4 4 4 4 4 4 4
2 2 4 4 4 4 4 4 42
2 2 4 4 4 4 4 4 29
2 2 4 4 4 4 4 4 11
2 2 4 4 4 4 4 4 4
2 2 4 4 4 4 4 4 5
2 2 4 4 4 4 4 4 6

有什么想法吗?

你可以使用这个 grep:

grep -oP '\(\K(\d+\s*)*(?=\))' file
2 2 4 4 4 4 4 4 4
2 2 4 4 4 4 4 4 42
2 2 4 4 4 4 4 4 29
2 2 4 4 4 4 4 4 11
2 2 4 4 4 4 4 4 4
2 2 4 4 4 4 4 4 5
2 2 4 4 4 4 4 4 6

解释:

  • \( - 匹配文字 (
  • \K - 重置匹配
  • (\d+\s*)* 匹配 0 个或多个数字组合后跟 0 个或多个 space
  • (?=\)) - 前瞻以确保其后跟文字 )
  • -P - 在 grep
  • 中使用 PCRE 正则表达式
  • -o - 只输出输入中匹配的字符串

使用 GNU grep:

grep -oP '\(\K[0-9 ]+' file

输出:

2 2 4 4 4 4 4 4 4
2 2 4 4 4 4 4 4 42
2 2 4 4 4 4 4 4 29
2 2 4 4 4 4 4 4 11
2 2 4 4 4 4 4 4 4
2 2 4 4 4 4 4 4 5
2 2 4 4 4 4 4 4 6