如何去除grep输出中的###符号?
如何去除grep输出中的###符号?
我来帮你搞定这个问题~你当前的grep输出带末尾###,是因为正则里的(.*)会匹配从Invoked at:之后到行尾的所有内容,自然就把后面的###也包含进来了。这里给你几个实用的解决办法:
调整grep正则一步到位:修改正则表达式,让它只匹配到末尾###之前的内容。比如:
grep -oP "Invoked at: \K[^#]+" $file这里的
[^#]+表示匹配一个或多个非#的字符,刚好会在遇到末尾的###时停止匹配,直接得到干净的日期时间。或者用正向预查的写法,更直观地指定停止位置:
grep -oP "Invoked at: \K.*?(?= ###)" $file(?= ###)是正向预查,意思是匹配到###之前的内容就停止,不会把###包含进去。用管道搭配sed/awk二次处理:如果不想改grep的正则,也可以把当前的输出通过管道传给sed或awk去掉末尾的###:
用sed的写法:grep -oP "Invoked at: \K(.*)" $file | sed 's/ ###$//'用awk的写法:
grep -oP "Invoked at: \K(.*)" $file | awk '{sub(/ ###$/,""); print}'
如果只需要处理这一种格式的行,第一种调整grep正则的方法最直接高效哦~
备注:内容来源于stack exchange,提问作者Blurman
相关产品推荐
相关产品推荐

