如何使用sed删除每行中第一个冒号及冒号之前的所有字符
sed命令调整方案
适配需求的最终命令
GNU/Linux 环境(主流发行版默认sed)
sed -i 's/.*:\s*//' file.txt
macOS 环境(BSD sed)
sed -i '' 's/.*:\s*//' file.txt
原理解释
- 原有命令问题:你之前使用的正则将冒号划入了捕获组
\1的范围,所以替换输出时会一并保留冒号 - 新命令逻辑:
.*是贪婪匹配规则,会从行首一直匹配到该行最后一个出现的冒号,完全避开了示例中时间戳冒号的干扰;:\s*匹配最后一个冒号以及冒号后可能存在的空格,将匹配到的所有内容整体替换为空,剩下的内容就是你需要的Hello! - 特殊场景适配:如果你需要过滤掉没有冒号的行,仅输出处理后的符合条件的内容,可使用命令:
sed -n '/.*:\s*/s///p' file.txt
内容的提问来源于stack exchange,提问作者mascDriver
相关产品推荐
相关产品推荐

