在 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'
我找不到在 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'