在字符类中否定空格正则表达式

3
什么是捕获到第一个空格之前的行中所有内容的最佳方法?例如,从这个例子开始:
>Peak_7847       Chr1    23988535_23998535

我希望你能够理解,我需要捕获以下内容:
Peak_7847

我尝试了:

sed -e 's/^>\([^\s]\+\)\s.*$/\1/'

(这种方式不起作用,并且在>后面捕获整行内容)。如果我将\s替换为“\t”,它就可以工作了:
sed -e 's/^>\([^ \t]\+\)\s.*$/\1/'
Peak_7847

我如何否定`\s`操作符?
谢谢!
2个回答

4

您可以使用:

str='>Peak_7847       Chr1    23988535_23998535'
sed 's/^>\([^[:space:]]*\).*$/\1/' <<< "$str"
Peak_7847

2
啊哈,谢谢!顺便问一下,你知道为什么\s不起作用吗?(SO允许时我会接受你的答案。) - Taj Morton
1
实际上,在sed的正则表达式引擎(BRE)中不支持\s - anubhava

1
这可能适用于您(GNU sed):
sed -r 's/(\S+).*/\1/' file

但为什么不呢:

sed 's/\s.*//' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接