我有一个这样的文件
x + chrX 15362 15364 + 100(3) *(0) *(0) *(0) 100(5) *(0) 100(1)
y + chrX 153626 153626 + 100(80) 98.56(79) 100(40) 100(47) 100(88) 4(23)
我想捕获括号内的值并打印它们,以便输出看起来像这样
x + chrX 15362 15364 + 3 0 0 0 5 0 1
y + chrX 153626 153626 + 80 79 40 47 88 23
我想在 sed 中这样做。
我试过这样的东西,但它不起作用
sed -r 's/^.*\((\d+)\)/\1/g'
另外,我怎样才能去掉括号内的所有内容,包括括号,以便我也得到以下输出
x + chrX 15362 15364 + 100 * * * 100 * 100
y + chrX 153626 153626 + 100 98.56 100 100 100 4
尝试这个:
sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'
\d
是一个 PCRE 构造,而不是来自扩展的正则表达式为了美观,将输出管道化
| column -t
。在这里,我们使用
sed
删除输入中的任何括号。该表达式([^)]*)
匹配左括号后跟任意数量的非右括号字符(即数字),后跟右括号。你也可以([0-9]*)
在这里使用。在这里,我们删除了括号之前的位和括号本身,并将所有这些替换为括号内的内容。之前的
(
内容由 匹配[^[:blank:]]*
,即任意数量的非空白字符,后跟与第一个sed
命令中相同的表达式,但捕获 和 之间的(
内容)
。捕获的字符串在命令的替换部分中被引用\1
。你的命令,
不能正常工作,因为
\d
它是一个 PCRE(一个类似 Perl 的正则表达式)。替换\d
为[0-9]
or[[:digit:]]
不会使它更好地工作,因为它会将整行替换为最后一个括号内的数字。