regex - 匹配 sed 中 [[:blank:]] 字符类的对面
问题描述
我找不到一种方法来表示 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
解决方案
字符类是[:blank:]
如此匹配它的反面,你只需要[^[:blank:]]
. 这应该有效:
sed -rn 's/^([^[:blank:]]*).*$/\1/p'
推荐阅读
- vue.js - Nuxt / Vue - 不要在突变处理程序之外改变 vuex 存储状态
- javascript - 它是哪种格式?倒计时.js
- go - Go 编译器/链接器行为
- android - 如何为 android 项目添加 ga4 分析?
- javascript - wordpress ajax rest api ("code":"rest_invalid_json","message":"Invalid JSON body passed.")
- ssl-certificate - 如何将网站更改为不再需要 SSL 证书
- python - pip install geopandas:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出
- javascript - 有没有办法在“.m3u8”视频文件中附加开始时间
- php - 替换 SquareBrackets 中的值并使用 php 循环它
- excel - 如何在 VBA 中使用组合框值设置 If Then