我找不到一种方法来表示 sed 中字符类的逆。如果这是一个类似 perl 的环境,我会使用 [^\s]。但是在 sed 中,这似乎匹配非 s,而不是非空白。
在一行文本(来自 gdrive)上,我需要捕获第一个非空白标记并忽略该行第一个空白之后(包括)之后的所有内容。
这是我要解析的输入的一个虚假但具有代表性的示例:
19845fake-FaKeE-xbk534sWsbBQ mydir dir 2019-01-01 19:10:44
我最初的尝试是这样的:
sed -rn 's/^([^\s]*).*$/\1/p'
起初它似乎有效,直到我注意到这是在第一个's'而不是第一个空格处切断。
从那以后,我尝试了各种排列,例如:
#matches up to the first 's'
sed -rn 's/([^\\s]*).*$/\1/p'
#matches only the first character
sed -rn 's/^([^[[:blank:]]]*).*$/\1/p'
#matches nothing at all
sed -rn 's/^([[^:blank:]]*).*$/\1/p'
sed -rn 's/^\s*([^\s]*).*$/\1/p'
预期:19845fake-FaKeE-xbk534sWsbBQ
实际:19845fake-FaKeE-xbk534