2017-01-02 32 views
1

+otherと次のカンマまでの文字列がすべて現れる正規表現が必要です。正規表現に文字が到達するまでの文字列を取得する正規表現

(word),+(other)(word),(code),(word),(other)(code),(example) 
(code),+(other),+(other)(code)(word)(example),(example),+(example) 
+(code),(other)(code)(word),(code),(word) 

で、私は私がegrep -o '\+\(other).*,ようになります使用し

+(other)(word) 
+(other) 
+(other)(code)(word)(example) 

私のコマンドを返すようにしたいです。 唯一の問題は、この正規表現内のコンマが必ずしも次のコンマであるとは限りません。今コマンドが返す

+(other)(word),(code),(word),(other)(code), 
+(other),+(other)(code)(word)(example),(example), 
+1

そうで、* [^、](その他)\ + \ 'egrepの-o」を試してみました、まだ? –

+0

それは期待された出力ではありませんか? '+(other)'から* first *カンマまでの文字列?どうして '+(他の)(コード)(単語)(例)、 'は一致してはいけませんか?推論で質問を更新してください。 –

+0

編集後、 'egrep -o '\ + \(other)[^、] *'のようになりますか? –

答えて

1

あなたは、最後の(および含む).*,,まで、できるだけ多くの任意の0+文字を消費します。

egrep -o '\+\(other\)[^,]* 

[^,]*パターンが,以外の任意の0+文字に一致します。,にマッチするのを避けるだけ最初,まで一致し、否定ブラケット表現[^,]を使用して、それに*数量詞を適用するには

+0

ありがとう!私はもう一度上記のような質問があります。文字pと記号aが\(other \)の後に表示されたいが、次のカンマの前にどのように組み込むことができますか?これは私が今考えているすべてのことです。\ * \(* \ *。* \ - 。* [^、] * 'しかし、もう一度私はすべてを再びキャプチャしています – Jacob

+1

これは、 "[デモ](https://regex101.com/r/syNSbc/1)のように、 ) –

+0

[^、] *私には行の先頭にカンマがあり、この文脈で私には意味をなさないと思われるので、正確には何ですか? – Jacob

0

あなたのgrepはPerl互換正規表現(PCRE)をサポートしている場合、あなたは非貪欲マッチングを使用することができます。

$ grep -Po '\+\(other\).*?,' infile 
+(other)(word), 
+(other), 
+(other)(code)(word)(example),