2016-10-31 3 views
1

これはあまりにも一般的な質問のように私は正規表現にはかなり新しいです。正規表現とリストの結果をまとめることができません

シナリオ:

私は、私は特定のパターンを単離したしたファイルのセットを持っている[mainpattern]と言います。このパターンのそれぞれの発生において、[mainpattern]の前には、その前に右矢印が付いた様々な[subpattern] occurencesが続きます。

cat * .txt | grepの "mainpattern"

... [>] [subpattern1] [。] [mainpattern] ...

... [>] [subpattern2] [。] [mainpattern] ...

...

... [>] [subpatternN] [。] [mainpattern] ...私は基本的にすべてのサブパターンが一意に列挙されている出力(無重複を生成しようとしています

)。何か案は?私は "grep出力から先にワードをコード化する方法を理解できませんでした"。

感謝

+0

は猫 '試してみてください:uniqのリストについては 次のようなsortuniqを追加するだけですgrep -oP '(?<= [。])サブパターン(?= [。]メインパターン)' 'ですが、重複した問題を解決するかどうかはわかりません。 –

+0

ちょうど試してみましたが(動作しません)、私は[mainpattern]部分を知っているという事実について具体的に考えるべきですが、[サブパターン]は常にランダムで不明です*先験*これらのランダムに生成されたシーケンスをリストすることです。 – pescator

+0

だから、 'サブパターン(subpattern)はドットだけであることが分かりますか? ''(?<= [。])[^。] *(?= [。]メインパターン) '' –

答えて

0

あなたは-oPオプション(PCREと出力一致モード用oP)でPCREスタイルの正規表現(?<=>)[^>.]*(?=[.]mainpattern)を使用することがあります。パターンが一致した

grep -oP '(?<=>)[^>.]*(?=[.]mainpattern)' 

  • (?<=>) - 文字列内で、先行する位置が>
  • [^>.]*は、 - (1以上使用+に一致するように)ゼロ以上に一致>.
  • (?=[.]mainpattern)以外の文字 - 右の消費後に後.mainpatternの存在を必要とする肯定先読み(前の)サブパターンを。
0

@WiktorStribiżewは正規表現を使用することができます。 | * .txtの

pcregrep -o '(?<=>).*?(?=\.mainpattern)' *.txt | sort | uniq 
関連する問題