sed を口頭で読む 括弧内の正規表現カラット、括弧外のアスタリスク

sed を口頭で読む 括弧内の正規表現カラット、括弧外のアスタリスク

前の質問に対するフォローアップです。」sedは、その行の最初のパターン一致のみを印刷します。

私が取り組んでいるデータ

... "one" ... "two" ... "three" ...

印刷したいのですが、one受け入れられる答えは次のとおりです。

sed 's/[^"]*"\([^"]*\)".*/\1/'

この正規表現を検索して理解しようとしましたが、この正規表現を理解できませんでした。

私の理解は次のとおりです

  • [^"]一致しないことを示します。"
  • *0 以前のすべての文字数と一致することを示します。*
  • \(\)後でその番号で参照できるように、2つの間に一致するすべての項目を保存することを意味します。つまり、私たちの場合\1
  • .*貪欲です。つまり、任意の文字数を意味します。

[^"]*ここの意味を理解していません。

ここで何が起こっているのかを理解するために、正規表現全体を口頭でどのように読むべきですか?

sed 's/[^"]*"\([^"]*\)".*/\1/'

ベストアンサー1

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  [^"]*                    any character except: '"' (0 or more times
                           (matching the most amount possible))
--------------------------------------------------------------------------------
  "                        '"'
--------------------------------------------------------------------------------
  \(                        group and capture to \1:
--------------------------------------------------------------------------------
    [^"]*                    any character except: '"' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  \)                        end of \1
--------------------------------------------------------------------------------
  "                        '"'
--------------------------------------------------------------------------------
  .*                       any character except \n (0 or more times
                           (matching the most amount possible))

sedコマンドの2番目の部分は、\1括弧を使用して「キャプチャされた」エントリを呼び出します。完全なコマンドsed自体は正規表現ではないことに注意してください。構成では、s/needle/pin/g正規表現は、またはneedle正規表現を「包装」したい場合(例:for awk)です/needle/

おすすめ記事