次の結果を表す文字列を検索するとします。
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
、空でない英数字文字列(含まれる場合があります_
)、NNN
1つ以上の数値文字列、および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.