从一个文件中提取多个子字符串,并使用python/sh在另一个位置列出它们

2024-10-04 01:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似以下的日志文件:

/* BUG: axiom too complex: SubClassOf(ObjectOneOf([NamedIndividual(http://www.sem.org/sina/onto/2015/7/TSB-GCL#t_Xi_xi)]),DataHasValue(DataProperty(http://www.code.org/onto/ont.owl#XoX_type),^^(periodic,http://www.mdos.org/1956/21/2-rdf-syntax-ns#PlainLiteral))) */
/* BUG: axiom too complex: SubClassOf(ObjectOneOf([NamedIndividual(http://www.sem.org/sina/onto/2015/7/TSB-GCL#t_Ziz)]),DataHasValue(DataProperty(http://www.co-ode.org/ontologies/ont.owl#YoY_type),^^(latency,http://www.w3.org/1956/01/11-rdf-syntax-ns#PlainLiteral))) */
....

>EM>txZixi>EEM>EM>TZIZE以及^ ^(,在本例中为潜伏期周期。你知道吗

注:文件中的每一个EM>xEEE>和YEE>有不同的字母值(例如x=“新浪”y=“繁荣”,所以-gt;txXiaXi~tsiaasiaNeX),所以我猜使用正则表达式将是一个更好的选择。你知道吗

因此,最终结果必须如下所示:

t_Xi_xi    XoX_type    periodic
t_Ziz    YoY_type    latency

我尝试了下面的正则表达式来提取它们,希望能够在shell中的sed的帮助下,将文件中的其余部分替换为“”,但我失败了。你知道吗

([a-zA-Z]_[a-zA-Z]*_[a-zA-Z]*)|(\#[a-zA-Z]*_[a-zA-Z]*)|(\^\([a-zA-Z]*)+

对于如何在Python(甚至shell本身)中实现这一点,任何类型的帮助都是值得赞赏的。你知道吗


Tags: 文件orghttpwwwtypebugtooem
1条回答
网友
1楼 · 发布于 2024-10-04 01:38:00
$ awk -F'#|\\^\\^\\(' '{for (i=2; i<NF; i++) printf "%s%s", gensub(/[^[:alnum:]_].*/,"",1,$i), (i<(NF-1) ? OFS : ORS) }' file
t_Xi_xi XoX_type periodic
t_Ziz YoY_type latency

上面使用GNU awk for gensub(),与其他awk一起使用sub()和一个单独的printf语句。你知道吗

相关问题 更多 >