grep 可変長オプションのテキスト

grep 可変長オプションのテキスト

任意の量のテキストを一致に含めることができるオプションのテキストの前のブロックを含むエッジ固定テキストを検索したいと思います。たとえば、私が、、、、、、を見つけようとしていますが、受け入れようと^xyzしているとします。^wxyz^vwxyz^uvwxyz^tuvwxyz^stuvwxyz^rstuvwxyz他の可能性はありません。[r-w](実際の検索では、先行文字の実際のブロックがこの単純化された例のようにアルファベット順になっていないため、単に正規表現の文字シーケンスを使用することはできません。)このegrep '^r?s?t?u?v?w?xyz'検索を作成する別の方法はありますか?オプションのフラグ(?)を各要素に個別に適用するのではなく、シーケンス全体に簡単に適用できますか?

編集する:

以下は、より現実的なデータの例です。一致させるフルテキストはAZHDEOIMOSJDJKEJLCNです。ただし、文字は左端からさまざまな角度に欠けているため、以下のすべてが一致する必要があります。

^AZHDEOIMOSJDJKEJLCN
^ZHDEOIMOSJDJKEJLCN
^HDEOIMOSJDJKEJLCN
^DEOIMOSJDJKEJLCN
^EOIMOSJDJKEJLCN
^OIMOSJDJKEJLCN
^IMOSJDJKEJLCN
^MOSJDJKEJLCN
^OSJDJKEJLCN
^SJDJKEJLCN
^JDJKEJLCN
^DJKEJLCN
^JKEJLCN
^KEJLCN

したがって、残差KEJLCNは必須であり、それ以前のすべてはオプションです。ただし、単にgrepfor を使用することはできません。KEJLCNこれは、インスタンスが行の先頭(^)にのみ固定され、オプションで上記の他の文字が前に来るためです。さらに、検索文字列は変数内にあり、スクリプトの部分文字列操作KEJLCNによって最小残差(例:)が抽出されます(たとえば、egrep検索テキストのシステムコマンドとして実行されるPerl環境では、デフォルトの$queryテキストが含まれます)。substr($query,-6)この場合、オプションの前のテキストが)の中に表示されますsubstr($query,0,length($query)-6。したがって、このソリューションは文字列リテラルだけでなく、変数型の正規表現でも機能します。

ベストアンサー1

grep '[[:lower:]]*xyz'

このパターンに一致するすべての行が返されます。しかし、もちろん、これは明示的な文字の順序と一致しません。

しかし、これはあなたが解決した問題のようです。

grep -f - <<\STRINGS /dev/fd/3 3<<\DATA
^ZHDEOIMOSJDJKEJLCN
^HDEOIMOSJDJKEJLCN
^DEOIMOSJDJKEJLCN
^EOIMOSJDJKEJLCN
^OIMOSJDJKEJLCN
^IMOSJDJKEJLCN
^MOSJDJKEJLCN
^OSJDJKEJLCN
^SJDJKEJLCN
^JDJKEJLCN
^DJKEJLCN
^JKEJLCN
^KEJLCN
STRINGS

SJDJKEJLCN                                                                  
JDJKEJLCN
o;aidsfjoasjif
KKEJnotLCN
DATA

出力

SJDJKEJLCN                                                                 
JDJKEJLCN 

プログラムで同じルックアップテーブルを作成したい場合...

grep -f - <<STRINGS /dev/fd/3 3<<\DATA
$(
    MATCH=ZHDEOIMOSJDJKEJLCN
    until [ ${#MATCH} -lt ${MINLEN=6} ]
    do  printf '^%s\n' "$MATCH"
        MATCH=${MATCH#?}
    done
)
STRINGS

SJDJKEJLCN                                                                  
JDJKEJLCN                                                                  
o;aidsfjoasjif                                                             
KKEJnotLCN                                                                 
DATA

出力

SJDJKEJLCN                                                                  
JDJKEJLCN

おすすめ記事