ファイルから電子メールアドレスを別の電子メールアドレスに直接変更するには?

ファイルから電子メールアドレスを別の電子メールアドレスに直接変更するには?

次のコード行を含むPHPファイルがあるとします。

$to = "example-1_2@example-1_2.com";

)を表すために、2つの二重引用符の間でEメールアドレスを変更したいと思います[email protected]

私は成功せずにこれを試しました。

read new_email_address
sed -i 's/^[a-zA-Z0-9-_]*$@^[a-zA-Z0-9-_]*$.^[a-z]*$/"${new_email_address}"/g' FILE

ベストアンサー1

あなたの質問に更新されたコマンドの簡単な説明がありますsed。現在、次のようになります。

sed -i 's/^[a-zA-Z0-9-_]*$@^[a-zA-Z0-9-_]*$.^[a-z]*$/"${new_email_address}"/g' FILE

これには2つの無効な文字範囲(両方ともread 0-9-_)が含まれ、変数はnew_email_address一重引用符で囲まれた文字列内にあるため、シェルによって拡張されません。また、$@^andの意図が何であるかよくわかりません$.^。なぜなら、$andは^式の対応する位置にある文字を文字通り一致させるからです。


この変数がファイルの残りの部分でどのように使用されるかを見ず、$toこの変数が1つの場所にのみ割り当てられ、表示される行がファイルの行とまったく同じであるとします。

sed 's/$to = ".*";$/$to = "'"$new_email_address"'";/' file >file.new

$to変数にEメールアドレスが含まれていることはすでにわかっているので、Eメールアドレスを一致させようとする必要はありません。私たちが心配しなければならなかった唯一のことは、正しい線を見つけようとすることでした。電子メールアドレスを正規表現と一致させることは、次のような場合に悪名高いです。硬い

以下は参考にするいくつかの点です。

  • inは式の末尾には表示されないため、特別な処理は必要ありません$。拡張正規表現を有効に$toするには-E、まずこれを実行せず、2番目にパターンの$ようにinをエスケープします。$to\$
  • この文字列$toいいえ一重引用符で囲まれているため、シェル変数として扱われます。
  • $new_email_address はいシェル変数なので、変数値(二重引用符)を導入するために一時的に一重引用符を区切ります。

-i置換が正しいか、ファイルが混乱しているかはまだわからないため、ここでは使用しないことをお勧めします。結果を新しいファイル名に書き込むことをお勧めします。

また、を渡してバックアップファイルとして使用するサフィックスを-ir示します。私はあなたがそのオプション(またはより一般的にサポートされているもの)を使用したいと思います。ただし、この単純な置換には拡張正規表現を使用しないため、どちらも必要ありません。sedr-r-E-r-E

上記のコマンドをテストしてみてください。

$ cat file
$to = "example-1_2@example-1_2.com";
$ [email protected]
$ sed 's/$to = ".*";$/$to = "'"$new_email_address"'";/' file >file.new
$ cat file.new
$to = "[email protected]";

おすすめ記事