sed正则表达式中":"的含义解析及相关命令疑问咨询
关于sed命令
s/:[^ ]*//g的解析 冒号
:的角色
在sed默认使用的基本正则表达式(BRE)中,:是普通字符,没有特殊语法含义,不需要转义就能直接匹配字面意义的冒号。[^ ]的含义
这里的[^ ]是一个否定字符集:
^在字符集[]开头时,表示“匹配除括号内字符之外的任意单个字符”是制表符(注意不是空格,是按下Tab键输入的字符)
所以[^ ]*表示“匹配0个或多个非制表符的字符”
- 整个命令的作用
s/:[^ ]*//g是全局替换命令,作用是:
在每一行中,找到所有以冒号开头,后面跟着任意数量非制表符字符的片段,将这些片段全部删除。
举个实际例子:
- 输入行:
user:alice age:30 city:ny - 执行命令后输出:
user age city
- 关于你疑惑的“没效果”情况
如果测试时觉得没效果,可能是这两种情况:
- 你的输入行里没有制表符,这时
[^ ]*会匹配冒号后面直到行尾的所有字符,比如输入hello:world会变成hello - 你的输入中冒号后面直接跟了制表符,这时
[^ ]*匹配0个字符,只会删除冒号本身,比如输入foo: bar会变成foo bar
内容的提问来源于stack exchange,提问作者zhang
相关产品推荐
相关产品推荐

