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



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

   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 或更多空格
  • (?=)) - 向前看以确保后面有文字)
  • -P - 在 grep 中使用 PCRE 正则表达式
  • -o - 在输入中仅输出匹配的字符串

使用 GNU grep:

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

输出:

2 2 4 4 4 4 4 4 42 2 4 4 4 4 4 4 422 2 4 4 4 4 4 4 292 2 4 4 4 4 4 4 112 2 4 4 4 4 4 4 42 2 4 4 4 4 4 4 52 2 4 4 4 4 4 4 6

最新更新