0

特定の単語ではないすべてのものに一致するように、 grepの正規表現を知りたいです。私は、単一の文字ではないすべてのものと一致しない方法を知っています、

gibberish blah[^.]*jack

間にピリオドが含まれていない限り、それは何とか、ジャックとその間のすべてに一致します。しかし、このようなことをすることは可能ですか?

gibberish blah[^joe]*jack

間に「ジョー」という単語が含まれていない限り、何とか、ジャックとその間のすべてに一致しますか?

更新: この目的により適している場合は、AWKを使用することもできます。

つまり、基本的には、「joe」が他の単語に含まれていない限り、「gibberish blahotherwordsjack」という文を取得したいだけです。

アップデート2(別の質問に対する回答):

すみません、疲れました。文には実際には「joe」という単語を含めることができますが、そのうちの2つを含めることはできません。したがって、「gibberish blah jill joe moo jack」は受け入れられますが、「gibberish blah jill joemoojoejack」は受け入れられません。とにかく、私は自分の問題の解決策を見つけました。「gibberish。*jack」をgrepしてから、単語数(wc)を実行して、その文に含まれる「joes」の数を確認します。wcが1で戻ってきた場合は問題ありませんが、2以上で戻ってきた場合は文が間違っています。

だから、私の問題さえ解決しない質問をしてすみません。彼の答えは元の投稿の問題を解決するように見えるので、私はsputnickの答えを正しいものとしてマークします。

4

2 に答える 2

2

あなたが探しているのはlookaroundという名前ですこれは&の高度なregexテクニックです。現代語で使用されています。スイッチがあれば、はこの式を処理できます。お持ちでない場合は、代わりに試してください。(または任意の現代語)。pcreperl-P-Ppcregrep

見る

ノート

を否定したいだけならregex、単純なgrep -v "regex"もので十分かもしれません。(それはあなたのニーズに依存します):

$ echo 'gibberish blah other words jack' | grep -v 'joe'
gibberish blah other words jack
$ echo 'gibberish blah joe other words jack' | grep -v 'joe'
$ 

見る

man grep | less +/invert-match
于 2012-11-08T03:44:18.623 に答える
0

ネガティブルックビハインド構文を試してください。

blahish blah(?<!joe)*jack
于 2012-11-08T03:48:18.730 に答える