何かのようなもの:
cat script.log | sed -n '/Name:/s/^.*Name:\([^)]*\)).*$/\1/gp'
仕事をする必要があります。
元の表現での最大の間違いは、2番目の括弧をエスケープしたことです。スニペットを実行すると、エラーが発生します。
sed: 1: "s/Name:\(.*\)\)/\1/g": RE error: parentheses not balanced
これを修正しても、sedはデフォルトですべての行を出力することがわかります。これが私が作り上げた表現がすることです。
sed式は。の形式を取り[address[,address]]function[arguments]
ます。式にオプションのアドレス要素が含まれていませんでした。「Name:」を含むすべての行に一致する単一のアドレス( )を含めました。/Name:/
この関数は、(1)検索パターンと(2)置換式の2つの引数を必要とする置換関数です。検索パターンは行全体に一致し、最初の括弧まで0個以上の文字を含む「Name:」に続く行のセグメントを抽出します。「エスケープされた」括弧はキャプチャグループを定義し、エスケープされていない括弧はキャプチャを終了します。パターンには、残りの行が含まれます(たとえば、.*$
)。行全体が一致するため、キャプチャされた部分のみを含む置換式に置き換えられます。
これをすべてまとめると、単純なsedステートメントは「Name:」を含むすべての行に一致し、行全体をとの間の文字Name:
と最初の左括弧()
)に置き換えます。フラグとフラグの-n
追加によりp
、一致した行のみが印刷されます。