整数に一致する正規表現パターンを理解していません。

整数に一致する正規表現パターンを理解していません。

https://www.gnu.org/software/sed/manual/sed.html#Command_002dLine-Options

-n
--quiet
--silent
-e script
--expression = script入力が処理されたときに実行されるコマンドセットにスクリプトのコマンドを追加します。

https://stackoverflow.com/questions/14593320/insert-field-separator-to-arrange-and-capture-value-in-variable-in-shell-script/14593411#14593411

この答えのように:

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

私は([0-9]\{1,99\}\)それがパターン整数を意味することを理解しています。
^文字列の先頭を引用します。
.*1 つ以上の文字を表します。

しかし、全体的にはまだ混乱しています。 sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

答え1

(まず、これはbash整数正規表現パターンではありません。sed正規表現を扱っており、bashとは何の関係もありません。)

だから私はあなたが正規表現を見つけることができないことを知っていますsed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

仕事をもっと簡単にしましょう。同等のコードは次のとおりです。sed -E -ne 's/^.* ([0-9]{1,99})/\1/p'

拡張(現代)正規表現を有効にする-Eと、エスケープされたコンテンツを使用する必要はありません。\

このs/pattern/replacement/演算子は、正規表現パターンに一致する左側の文字列を見つけ、右側の文字列に置き換えます。

今集中してみましょう/^.* ([0-9]{1,99})/

  • ^行の開始一致
  • .*任意の文字と0回以上一致
  • (空白)は単一の空白文字と一致します。
  • [0-9]{1,99}少なくとも1回、最大99回発生するすべての数字と一致するため、長さが1から99までのすべての数字です。

([0-9]{1,99})かっこ内にあります。これは、sedがその部分文字列を「キャプチャ」して\1使用する置換部分に使用することを意味します。

関連情報