kshコマンドラインの正規表現とパターン

kshコマンドラインの正規表現とパターン

正規表現文字列の使用と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 -nameUnixモードを使用しているため、.*モードで使用すると.ANY_STRING_OR_NO_STRINGリングが見つかりません。
次のように正規表現を使用します。
find -regex

扱う

関連情報