【问题标题】:Matching opposite of [[:blank:]] character class in sed [duplicate]在 sed [重复] 中匹配 [[:blank:]] 字符类的对面
【发布时间】:2019-02-10 01:05:51
【问题描述】:

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

【问题讨论】:

    标签: regex sed character-class


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 2015-03-24
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      相关资源
      最近更新 更多