の2番目の発生一致SED:質問更新パターン
$Subj .= "HAD PROBLEMS";
if ($To) {
$Cc = "abc\@example.com";
}
else {
$Cc = "abc\@example.com";
}
:
をIは、下記のいずれかの形式のコードのブロックを含むファイルを有します2.
$Subj .= "HAD PROBLEMS";
if ($To) { $Cc = "abc\@example.com"; } else { $Cc = "abc\@example.com"; }
$ Cc変数(2回目)のメールIDを新しいemに置き換える必要があります両方のフォーマットのail id。
私はそうするために次のsedコマンドを持っています。
sed '\|HAD PROBLEMS|,/}/ s/$Cc = \(\"[A-Za-z0-9]*\)\(.*\)\([A-Za-z0-9]*\)\@example.com\"/\$Cc = "new email\\@example.com"/' test.txt
このコマンドは、私の終了マッチパターンから{}
ブロック($Cc
の最初の出現)がある場合は、「}」で$Cc
変数に電子メールIDを交換します。私は2番目の$Cc
のメールIDを置き換えたいと思います。 '}'
の2回目の出会いはどのように一致しますか?
以下の解決方法は、最初のフォーマットで使用できます。しかし、私はどちらのフォーマットにも対応する汎用ソリューションが必要です。誰でも助けてもらえますか?
私は説明がはっきりしていることを望みます。
、適切な期待される出力とスクリプトの構文の問題を修正。 – Inian
なぜ$ Toに関係なく$ Ccを同じ値に設定していますか?それはタイプミスですか? – codeforester
@Inianでは、あなたのsedスクリプトは実際に両方のインスタンスを置き換えますが、それはOPが探しているものではありません。彼は 'HAS PROBLEMS'の後にある' if'の 'else'ブロックに現れる* 2番目のインスタンスだけを望みます。これはsedで表現できるものかもしれませんが、sedの保持スペースと 'x/s/[az] + \\ @ [az .-] +/new @ exampleのようなスニペットの使用が必要になるでしょう。 com/2; p'を実行すると、ファイルの重要な塊だけをsedの保持スペースに入れる方法がわかります。あまりにも夜遅く、それを理解するために、...救助のためのawk! – ghoti