我有这样的台词:
scaffold157|size21652:7243-9055/0_1813 10 -2127 86.5772 0 272 854 1813 1 185842 186425 147764049 254
我需要从“/”中删除部分直到字边界(第一个标签),所以在我的例子中这部分:
/0_1813
有了这个结果:
scaffold157|size21652:7243-9055 10 -2127 86.5772 0 272 854 1813 1 185842 186425 147764049 254
然而,我的sed似乎过于贪心了
sed 's/\/0_.*\b//'
吃完所有的专栏。但是,使用。+,命令根本不起作用,并且不会替换任何内容。我究竟做错了什么?为什么。+不工作?
答案 0 :(得分:2)
.+
行为方式的原因是+
只是ERE中的元字符,sed默认使用BRE,所以除非您通过添加-r
或转义启用ERE因为\+
sed认为+
只是字面加字符。
但这是一个不错的选择,你只需要:
$ sed 's|/[^[:space:]]*[[:space:]]*||' file
scaffold157|size21652:7243-905510 -2127 86.5772 0 272 854 1813 1 185842 186425 147764049 254
在某些seds中,您可以将[[:space:]]
替换为\s
,将[^[:space:]]
替换为\S
,例如: GNU。
答案 1 :(得分:1)
匹配数字:
sed 's/\/0_[0-9]*//'
或否定空格:
sed 's/\/0_[^ \t]*//'
sed 's/\/0_[^[:blank:]]*//'
sed -r 's/\/0_\S*\b//'
可能使用否定空格,不再需要\b
。
答案 2 :(得分:1)
我需要从“/”中删除部分,直到字边界(第一个标签)
这里这个单行提供了您的预期输出:
sed -r 's#/\S*\b##'