サブパターンがターゲットスキーマに含まれる場合と含まれない場合があるように、すべての結果を特定する方法は?

サブパターンがターゲットスキーマに含まれる場合と含まれない場合があるように、すべての結果を特定する方法は?

次の結果を表す文字列を検索するとします。

anything1.knownKeyWord
anything2.knownKeyWord
anything3[1].knownKeyWord

3つの文字列すべてに一致するようにgrepの共通構文をどのように作成しますか?私はすでにこれをしました

^.*\w+\d[\[]?[0]?[\]]?\.knownKeyWord.*$  

しかし、インデックスについては[1]良い方法で書かれていませんでし[1][2342jdsjf]

答え1

拡張正規表現を使用してください。

$ grep -E '[[:alnum:]_]+[[:digit:]]+(\[[^]]+\])?\.knownKeyWord' <file
anything1.knownKeyWord
anything2.knownKeyWord
anything3[1].knownKeyWord

これにより、次の形式の文字列を含むすべての行が抽出されます。

XXXNNN[YYY].knownKeyWord

または

XXXNNN.knownKeyWord

ここではXXX、空でない英数字文字列(含まれる場合があります_)、NNN1つ以上の数値文字列、およびYYY含まれていない文字列です]

grep-x一致する場合と一緒に使用完全なライン-w一致が完了する必要がある場合は、以下を使用してください。性格(つまり、他のものの部分文字列ではありません)


sed正規表現の各部分が一致する部分を表示するには、次のようにします。

$ sed -E 's/([[:alnum:]_]+)([[:digit:]]+)(\[[^]]+\])?(\.knownKeyWord)/<\1><\2><\3><\4>/' <file
<anything><1><><.knownKeyWord>
<anything><2><><.knownKeyWord>
<anything><3><[1]><.knownKeyWord>

答え2

この試み、

grep -w 'knownKeyWord$' file.txt

~からman

-w, --word 正規表現

          Select  only  those  lines containing matches that form whole words.  The test is that the matching substring must either be at the beginning of the line, or
          preceded by a non-word constituent character.  Similarly, it must be either at the end of the line or followed by a non-word  constituent  character.   Word-
          constituent characters are letters, digits, and the underscore.

関連情報