0

アスタリスクまたはスターは、前のトークンを 0 回以上照合するようにエンジンに指示します。プラスは、前のトークンとの一致を 1 回以上試行するようにエンジンに指示します。

定義に基づいて、なぜプラス記号がアスタリスク記号よりも多くの一致を返すのか疑問に思っていました.

 echo "ABC ddd kkk DDD" | grep -Eo "[A-Z]+"

戻り値

ABC DDD

 echo "ABC ddd kkk DDD" | grep -Eo "[A-Z]*"

ABCを返します

4

1 に答える 1

5

私が知る限り、そうではありません。GNU grep バージョン 2.5.3、2.6.3、2.10、および 2.12 では、次のようになります。

$ echo "ABC ddd kkk DDD" | grep -Eo "[A-Z]+"
ABC
DDD
$ echo "ABC ddd kkk DDD" | grep -Eo "[A-Z]*"
ABC
DDD

2 番目の例を再確認してください。出力が 1 行しかないことを確認できる場合は、grep. GNU を使用している場合grep、出力はgrep --version何ですか? そうでない場合は、どの OS を使用していますか? (知っている場合) どのようなgrep実装をしていますか?

アップデート :

ソースから GNU grep 2.5.1 (使用しているバージョン) をビルドしてインストールし、出力を確認しました。これは のそのバージョンのバグのようでgrep、明らかに 2.5.1a から 2.5.3 の間で修正されています。GNU grep 2.5.1 は約 12 年前のものです。新しいバージョンをインストールできますか? 2.5.3ChangeLogを調べると、これが修正された可能性があると思われます。

2005-08-24  Charles Levert  <charles_levert@gna.org>

    * src/grep.c (print_line_middle): In case of an empty match,
      make minimal progress and continue instead of aborting process
      of the remainder of the line, in case there's still an upcoming
      non-empty match.
    * tests/foad1.sh: Add two tests for this.
    * doc/grep.texi, doc/grep.1: Document this behavior, since
      --only-matching and --color are GNU extensions which are
      otherwise unspecified by POSIX or other standards.

使用しているマシンにフル アクセスできない場合でも、ソース tarball をダウンロードしてftp://ftp.gnu.org/gnu/grep/、ホーム ディレクトリにインストールすることができます (システムに動作するコンパイラと関連ツールがあると仮定します)。

于 2013-08-21T18:15:31.340 に答える