在 sed 中匹配 [[:blank:]] 字符 class 的对面

Matching opposite of [[:blank:]] character class in sed

我找不到在 sed 中表示字符 class 的反转的方法。如果这是一个类似 perl 的环境,我会使用 [^\s]。但是在 sed 中,这似乎匹配非 s,而不是非空白。

在一行文本(来自 gdrive)上,我需要捕获第一个非空白标记并忽略行中第一个空白之后(包括在内)的所有内容。

这是我尝试解析的输入的一个虚假但具有代表性的示例:

19845fake-FaKeE-xbk534sWsbBQ              mydir                                    dir               2019-01-01 19:10:44

我最初的尝试是这样一行:

sed -rn 's/^([^\s]*).*$//p'

起初它似乎可以工作,直到我注意到它在第一个 's' 而不是第一个空格处被截断。

此后我尝试了各种排列,例如:

#matches up to the first 's'
 sed -rn 's/([^\s]*).*$//p'

#matches only the first character
 sed -rn 's/^([^[[:blank:]]]*).*$//p'

#matches nothing at all
 sed -rn 's/^([[^:blank:]]*).*$//p'



sed -rn 's/^\s*([^\s]*).*$//p'

预计:19845fake-FaKeE-xbk534sWsbBQ

实际:19845fake-FaKeE-xbk534

字符class是[:blank:]所以要匹配它的反义词,你只需要[^[:blank:]]。这应该有效:

sed -rn 's/^([^[:blank:]]*).*$//p'