正規表現文字列の使用とin a regex string*
の違いが何であるかを知りたいです。.*
は「0〜n文字」を意味するようですが、それが何を意味するのか*
理解していません。.*
例えば:と?"2013*11*27"
の違いは何ですか?"2013.*11.*27"
私が見ると
find . -name [pattern]
私が試したパターンは"2013.*11.*25"
見つかりませんでした"2013-11-25"
が、を使用して"2013*11*25"
見つけました。
なぜ? Unixでのワイルドカードのゼロまたはnの発生は正規表現であり、*
なぜ.*
機能しないのですか?
答え1
*
代表する0個以上のランダム文字存在するシェルワイルドカードマッチ。
*
代表する0回以上発生前の表現 存在する正規表現マッチ。
.
代表する単一のランダム文字存在する正規表現マッチ。
したがって、*
シェルのワイルドカード一致は.*
正規表現の一致と同じです。
「2013*11*27」正規表現の一致一致"2013333111111111127"
が一致しません。ただし、これを使用してファイルを検索する場合(たとえば、シェルが正規表現ではない)、「シェルワイルドカード一致」として処理する引数"2013-11-27"
として使用するとうまくいきます。ls
"2013-11-27"
* (あなたの場合、式はそれぞれ対応する文字3
と正確に一致する単一文字です1
。)
答え2
まず、正規表現をUnixシェルモードから分離する必要があります。
kshコマンドには特別なオプションが必要で、Unixモードを使用します。
たとえば、grep -Rを使用すると正規表現が使用されます。
正規表現の構文は*
0番またはn番を意味します。 Unix
モードでは、*
すべての文字列を意味し、行をスキップするかどうかによって設定によって異なります。
正規表現を使用する場合は、.*
ジャンプラインを除くすべての文字を0回またはn回意味し、正規表現で使用すると、前の文字
を0回またはn回一致させます。*
.*
正規表現のUnixパターンと同じ*
find -name
Unixモードを使用しているため、.*
モードで使用すると.ANY_STRING_OR_NO_STRING
リングが見つかりません。
次のように正規表現を使用します。
find -regex
扱う