尝试创建一个简单的脚本,通过 /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
答案2
这可能对你有用:
sed 's/://2' file
答案3
你为什么不寻找冒号和空格而不是数字和冒号
尝试这个:
lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: | sed 's/: / /g';}