2016-09-17 8 views
0

を使用してファイルから複数の部分文字列を抽出し、別の場所でそれらをリスト:私はt_Xi_xit_Zizのフィールドを抽出したい私は以下のようなログファイル持っているの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))) */ 
.... 

XoX_typeYoY_typeまた値後^^(この場合待ち時間周期である。

注:XおよびYの各英字の値がファイルに含まれています(例: X = "sina" Y = "Boom" so - > t_Xi_xi〜t_Sina_sina)だから正規表現を使うのが良い選択だと思います。

だから、最終的な結果は以下のようなものでなければなりません:私はそれらを抽出するために、以下の正規表現を試してみた

t_Xi_xi XoX_type periodic 
t_Ziz YoY_type latency 

、うまくいけばとファイル内に「」それの残りの部分を置き換えることができるようにsedシェルで助けてもらえませんでした。

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

これをPython(またはシェル自体)で行う方法については、何らかの助けに感謝します。

+0

その正規表現では、パイプの周りのスペース(対応する選択肢)は意図的ですか? '#...'の部分はデータ内の空白に囲まれていないようです。 – lenz

+0

@lenz編集のおかげで!それらを修正しました。 –

+0

まだ動作しませんか?そうでない場合、正確に何が間違っていますか? – lenz

答えて

1
$ 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 

上記では、gensub()にはGNU awkを使用していますが、sub()と別のprintfステートメントを使用しています。

+1

素晴らしい!どうもありがとう –

関連する問題