2012-03-10 14 views
0

grepを使用してファイルから部品を抽出していますが、正しく動作させるには問題があります。文字列からPCRE - 最初の一致

something0(something1 

私は何かを抽出したい0。これは

echo 'a b(c d' | grep -Po '(?m)^.+?(?=\(.+)' #outputs 'a b' 

でもないので、他の入力に、いくつかの入力に正常に動作し、

echo 'a b()c d(e f' | grep -Po '(?m)^.+?(?=\(.+)' #outputs 'a b' and '() c d' 

にはどうすればいいのgrepは最初のマッチを返すか、私の正規表現を改善するだろうか? grepのは、これらの行でファイル全体を読み込みますし、私はこれをmisstakingていないよ場合にのみ出力最初は今までのファイルにマッチしますので、

head -n 1 

、配管にgrepする出力は、代替ではありません。それはあなたが確信している、任意の '('。

感謝。

-P

答えて

0

あなたが望むものとまったく同じものはどうですか?

^[^(]*?(?=\() 
+0

ありがとうございます。私は質問が自明だが、正規表現は私にはかなり新しいことを理解しています。 –

+0

@ MLP Np m8。喜んで助けてください。 – FailedDev

0

のErが含まれていないことsomething0を想定してオーケーだ?

$ echo 'a b()c d(e f' | grep -Po '(?m)^.+?(?=\(.+)' 
a b 

(また最後のことに注意してください+は不要です;正規表現は、より短い(?m)^.+?(?=\(.)に相当します。

+0

はい、確信しています。出力は 'a b'と '()c d'です。余計な「+」を指摘してくれてありがとう。 –

0

次の正規表現で試してください。

$ echo 'a b(c d' | grep -Po '^([^(]*)' 
a b 
$ echo 'a b()c d(e f' | grep -Po '^([^(]*)' 
a b 
関連する問題