如何使用 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
我有一个文件,结果如下:
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