删除第二个冒号

删除第二个冒号

尝试创建一个简单的脚本,通过 /var/log/maillog 中出现的队列编号列出群发邮件。我从这个开始:

[root@ditirdlns01 ~]# lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: ;}
[root@ditirdlns01 ~]#

其产量:

[root@ditirdlns01 ~]# lsMails systems
Jul  1 15:12: AF649479A
Jul  1 15:14: 024682F59
Jul  1 15:14: 067A447B9
Jul  1 15:14: 0A3EA479A
Jul  1 15:14: 0DCBE5010
Jul  1 15:21: 97DAB2F59
Jul  1 15:24: D1D9B2F59

这完全没问题,只是我想去掉第二个冒号(显然,日志中的冒号是将分钟与秒分开的。我实际上不希望用户看到第二个冒号,所以将其裁剪掉对我来说很有效) 。我尝试通过 sed 进行管道传输,寻找一个冒号,前面有一个数字,后面有一个空格,但我得到了与以前相同的结果:

[root@ditirdlns01 ~]# lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: | sed 's/([0-9]):\s+/ /g';}
[root@ditirdlns01 ~]# lsMails systems
Jul  1 15:12: AF649479A
Jul  1 15:14: 024682F59
Jul  1 15:14: 067A447B9
Jul  1 15:14: 0A3EA479A
Jul  1 15:14: 0DCBE5010
Jul  1 15:21: 97DAB2F59
Jul  1 15:24: D1D9B2F59

我的具体问题是:为什么([0-9])不匹配数字而不将其包含在结果中?

答案1

要回答您的具体问题,sed 组捕获要求转义括号。重复字符也+需要转义。

sed如果将命令管道的部分替换为以下内容,它应该可以工作:

 sed 's/\([0-9]\):\s\+/\1 /g'

答案2

这可能对你有用:

sed 's/://2' file

答案3

你为什么不寻找冒号和空格而不是数字和冒号

尝试这个:

lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: | sed 's/: / /g';}

相关内容