2017-10-02 10 views
-1

私はgrepを使い始めたばかりで、 "go"で始まる少なくとも2つの単語を含む行を探したいと思っています。また、単語が終わったかどうかを判断するには、スペース、ピリオド、コンマ、またはセミコロンを続けなければなりません。これは私の条件に一致するが、私は四つの可能な解決策があることを知っている3つの結果を返しているgrep -Einvw "regexp"を使用して、特定の文字で始まる単語の行を検索しますか?

grep -Ein " go[a-z]*[ .,;].* go[a-z]*[ .,;]" file.txt 

次のように

私が出ているソリューションです。誰も助言をお願いしますか?

+0

4番目の(匹敵しない)行とは何ですか? – melpomene

+0

私はそれが何であるかわからない、私は4つの結果があることを知っている。 – cpersonal

+0

どのように4つの結果があることを知っていますか? – melpomene

答えて

0

Gnu grepが "単語境界"をサポートしている場合は、最初の単語の先頭にもそれを使用します。これは行の先頭にも一致するためです。 (あなたの現在の正規表現では、両方の単語の前にスペースが必要です。)

0

Bassからの回答は正しいです。ここ は、このような行を検出するため、可能な解決策である:

\bgo\w*\b.*\bgo\w*\b 

あなたはそれが大文字小文字を区別しない場合(「のGoPro」または「GOAL」のような単語と一致します):

\b[gG][oO]\w*\b.*\b[gG][oO]\w*\b 

に応じて、あなたが期待している言葉が、あなたはまた、「E」のような特殊な単語文字を一致させたい場合は、常にそれを追加CAL:

\b[gG][oO][\wéÉ]*\b.*\b[gG][oO][\wéÉ]*\b 

注:それがあればマッチが全体のライン、単なるテストを返しませんが一致。

0

これは、ジョブを実行する必要があります。

grep -Ein '\bgo.*\bgo' file.txt 

は説明:file.txtをして

\b : word boundary, makes sure we don't have any letter before 
go : literally "go" 
.* : 0 or more any character 
\b : word boundary, makes sure we don't have any letter before 
go : literally "go" 

goabc xyz go def 
goabc xyz defgo 
goabc xyz go def 

それが与える:

関連する問題