如何使用sed打印每行匹配':'后剩余的内容?
问题描述
在Windows系统的Cygwin环境中,需要处理如下格式的文本文件:
log-2023-06-30-082821.txt:2023-06-30 08:30:32.648 log-2023-06-30-082821.txt:2023-06-30 08:32:07.235 log-2023-06-30-083220.txt:2023-06-30 08:32:55.831 log-2023-06-30-083604.txt:2023-06-30 08:36:39.380
目标是提取每行第一个冒号之后的所有内容,期望输出如下:
2023-06-30 08:30:32.648 2023-06-30 08:32:07.235 2023-06-30 08:32:55.831 2023-06-30 08:36:39.380
尝试过多个sed命令但没成功,求可行的实现方式。
可行解决方案
方法1:sed命令(修正版)
你之前的sed命令可能没写对正则规则,正确写法是匹配行首到第一个冒号的内容并替换为空:
sed 's/^[^:]*://' your_file.txt
^[^:]*:匹配从行首开始到第一个冒号前的所有非冒号字符://:把匹配到的部分替换成空,剩下的就是冒号后的目标内容
直接在Cygwin的bash终端执行即可,记得替换your_file.txt为实际文件名。
方法2:awk命令
awk处理字段分割场景很灵活,两种写法都能实现需求:
# 方式1:截取第一个冒号后的所有内容 awk -F: '{print substr($0, index($0, ":")+1)}' your_file.txt # 方式2:替换掉行首到第一个冒号的内容后打印 awk '{sub(/^[^:]*:/, ""); print}' your_file.txt
方法3:cut命令
这是最简洁的实现方式,指定冒号为分隔符,直接输出第2个及以后的字段:
cut -d: -f2- your_file.txt
-d::设置分隔符为冒号-f2-:输出从第2个字段到最后一个字段,自动保留字段间的冒号
内容的提问来源于stack exchange,提问作者Jawad Ali Qamar
相关产品推荐
相关产品推荐

