"grep"を使用して指定された3文字を順序に関係なくすべて含む行を検索する

"grep"を使用して指定された3文字を順序に関係なくすべて含む行を検索する

行を含む文書があり、順序に関係なく、各行に少なくとも[a | b | c]が表示されることを確認する必要があります。

たとえば、

入力する:

abc
bca
cab
hhfdhdhfabjfdjdjff
acjfdjdfjdf
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

目的の出力(4行目はおよびaのみを含み、含まbないので存在しませんc):

abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

私たちはLinuxを使用しています。

答え1

パイプで接続してください:

grep a file | grep b | grep c

答え2

利点は、次の例でsed簡単grepに確認できます。

sed -n '/a/{/b/{/c/p;};}' file

または:

sed '/a/!d;/b/!d;/c/!d' file

答え3

awk '/a/ && /b/ && /c/' file

またはgrepを使用してください(ただし、拡張はうまくいきません)。

grep -e 'a.*b.*c' -e 'a.*c.*b' -e 'b.*a.*c' -e 'b.*c.*a' -e 'c.*a.*b' -e 'c.*b.*a'  file

答え4

それをgrep受け入れる-Pパール正規表現)範囲。

$ grep -P '^(?=.*a)(?=.*b)(?=.*c)' file
abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

説明する:

  • ^行の先頭に一致します。
  • (?=.*a)一致させる文字列に文字を含める必要がある場合にのみa
  • (?=.*b)必ず含める必要がありますb
  • (?=.*c)必ず含める必要がありますc

関連情報