我需要使用grep。
匹配后缀日志的以下部分 Aug 6 16:00:35 d1234567-002-e3 postfix/smtp[16032]: 3E60C7832
^^^^^^^^^^
到目前为止,我能够做到的唯一方法是使用负向前瞻,但在我当前的grep实现中不允许这样做(不使用perl regex)。
我认为我可以按照......(不完全解决方案)的方式做点什么
.*:.*:.*:
答案 0 :(得分:1)
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask(rawValue: IInterfaceOrientationMask.portrait) // this enable all portrait orientation for all device
}
对于$ s="Aug 6 16:00:35 d1234567-002-e3 postfix/smtp[16032]: 3E60C7832"
解决方案,
sed
对于$ sed -E 's/.*]: //' <<< "$s"
解决方案,
grep
对于$ grep -oP ']: \K.*' <<< "$s"
解决方案,
awk
答案 1 :(得分:0)
您可以尝试以下模式
my $s = "Aug 6 16:00:35 d1234567-002-e3 postfix/smtp[16032]: 3E60C7832";
if($s=~m/.*:\s(.+)/)
{
print $1,"\n";
}
或者如果您想通过冒号跟踪,可以使用以下正则表达式
if($s=~m/^[^:]+:[^:]+:[^:]+:\s*(.+)/)
{
print $1,"\n";
}
在你的正则表达式中,你提到了.*:.*:.*:
以及添加另一个.*
的需要,因此完整的正则表达式为.*:.*:.*:(.*)
。但这不是一个好的正则表达式,因为*
与贪婪匹配零次或多次,因为每次搜索它都将结束,然后它将回溯以匹配:
。
为避免贪婪匹配,我们可以?
以及*
和+
使用[^:]
。但是对于你的问题否定字符类(.*:.*:.*:(.*)
)是最好的解决方案。
贪婪的比赛
对于这个.*?:.*?:.*?:(.*)
模式,它将在212步之后给出结果。 check here
非贪婪匹配
使用此^[^:]+:[^:]+:[^:]+:(.*)
模式,它将在59步后给出结果。 check here
否定字符类
使用此Java –jar Jenkins.war
模式,它将在11个步骤后给出结果。 check here
答案 2 :(得分:0)
my ( $mail_id ) = m{postfix/smtp[\d+]: (\w+)}
我的意思是,你确实将它标记为perl,对吧?
这样:
perl -lne 'm{postfix/smtp[\d+]: (\w+)} and print $1,"\n;' postfix.log