1

次のテキストを含むファイルがあることを考慮してください。

lknsglkn cat lknrhlkn lsrhkn
cat lknerylnk lknaselk cat
awiooiyt lkndrhlk dhlknl
blabla cat cat bla bla

grepを使用して、行の2番目の単語として「cat」を含む行(1行目と4行目)のみを出力する必要があります。複数のコマンドを試しましgrep -e 'regex' <file>たが、正しいコマンドを取得できないようです。行のN番目の単語を一致させる方法がわかりません。

4

4 に答える 4

4

これはあなたのために働くかもしれませんか?

grep -E '^\w+\s+cat\s' file

最初の「単語」に単語以外の文字を含めることができる場合、たとえば"#, (,[.."、次のことを試すこともできます。

grep -E '^\S+\s+cat\s' file

入力例を使用して:

kent$  echo "lknsglkn cat lknrhlkn lsrhkn
cat lknerylnk lknaselk cat
awiooiyt lkndrhlk dhlknl
blabla cat cat bla bla"|grep -E '^\S+\s+cat\s'
lknsglkn cat lknrhlkn lsrhkn
blabla cat cat bla bla
于 2013-03-24T22:51:39.753 に答える
1

何が単語を構成しますか?

grep '^[a-z][a-z]*  *cat '

これは、の後に少なくとも空白がある場合に機能しcatます。それが保証されていない場合は、次のようにします。

grep -E '^[a-z]+ +cat( |$)'

これはcat、空白または行末が続くものを探します。

「最初の単語」(大文字、数字、句読点)のより広範な定義が必要な場合は、文字クラスを変更します。空白またはタブを許可する場合は、変更を加えることができます。先頭に空白を含めることができる場合は*、キャレットに''を追加します。必要に応じてバリエーション。

これらのバリエーションは、オプションgrepをサポートするすべてのバージョンで機能し-Eます。\SPOSIXは、「非空白」を意味するなどの表記法を義務付けていませんが、GNUgrepはそれを拡張機能としてサポートしています。動作しないが存在する場合、grep -Eバージョンは通常で動作します(でオプションを使用しないでください)。egrepgrep -Eegrep-Eegrep

于 2013-03-24T22:54:27.060 に答える
0

以下が機能するはずです。

grep -e '^\S\+\scat\s'

行は、少なくとも1の長さの非空白で始まり、その後に空白が続き、「cat」という単語の後に空白が続く必要があります。

于 2013-03-24T22:53:35.497 に答える
0

遅くなりますが、おそらくもっと読みやすくなります:

awk '$2 == "cat"' file
于 2013-03-25T00:27:44.743 に答える