最初の単語に特定の文字セットを含む行を見つける

最初の単語に特定の文字セットを含む行を見つける

入力ファイルは、複数の10文字の組み合わせを含む行の外側にあります。

NGNAEAREAX EAHVSELYCI FNWGNLACQM AWKLRMDHIT PRYMFNYMVM
NCNREDEEEQ EAHVSELYCI FNWGNLACQM AWKLRMDHIT PRYMFNYMVM

最初の単語に「REGEX」という単語を構成する文字を含むすべての行を見つけるには、正規表現(PCREまたはBRE / ERE)が必要です。したがって、行の最初の単語には少なくともR 1、E 2、G 1、X 1が含まれている必要があります。

したがって、上記の結果は次のようになります。

NGNAEAREAX EAHVSELYCI FNWGNLACQM AWKLRMDHIT PRYMFNYMVM

ベストアンサー1

単一の正規表現と一致させることはできません(*)。最終的な真または偽の結果を得るには、各条件(R 1、E 2、G 1、X 1)を個別に論理的にANDして一緒にテストする必要があります。

たとえば、次のようにしますawk

$ awk '$1 ~ /R/ && $1 ~ /E.*E/ && $1 ~ /G/ && $1 ~ /X/' inputfile.txt 
NGNAEAREAX EAHVSELYCI FNWGNLACQM AWKLRMDHIT PRYMFNYMVM

(*) 次の代替項目を使用して正規表現を作成できます。すべて5文字(R、E、G、E、X)の可能な組み合わせは異なる順序で表示されますが、これは非現実的です。


しかし、大文字と小文字を区別しない一致が必要で、GNU awkを使用している場合:

$ awk -v IGNORECASE=1 '$1 ~ /R/ && $1 ~ /E.*E/ && $1 ~ /G/ && $1 ~ /X/' inputfile.txt 

または、GNU awkなしで大文字と小文字を区別しません。

$ awk '$1 ~ /[Rr]/ && $1 ~ /[Ee].*[Ee]/ && $1 ~ /[Gg]/ && $1 ~ /[Xx]/' inputfile.txt 

おすすめ記事