0

Q1:すべてのドメイン名が総称になるように一連の電子メールIDを含むファイルを編集したいのですが。

Example,
peter@yahoo.com
peter@hotmail.co.in
philip@gmail.com

to
peter_yahoo@generic.com
peter_hotmail@generic.com
philip_gmail@generic.com

次のsedcmdを使用して@を_に置き換えました

sed 's/@/_/' <filename>

ドメイン名の最後の部分を@generic.comに置き換えることができるように、上記のcmdに別のsed cmdを追加する方法はありますか?

Q2:ドメイン名の最後にテキストがある場合、どうすればこれにアプローチできますか?

Example,
peter@yahoo.com,i am peter
peter@hotmail.co.in,i am also peter

To,
peter_yahoo.com@generic.com,i am peter
peter_hotmail.co.in@generic.com,i am also peter

@(。*)の代わりに@(、)を試しましたが、機能せず、他の解決策を考えることができません

Q3:私の例がこのようなものだとしたら、

peter@yahoo.com
peter@hotmail.co.in,i am peter

結果を次のようにしたいと思います。

peter_yahoo.com@generic.com
peter_hotmail.co.in@generic.com,i am peter,i am peter

単一のsedcmdでこれを行うにはどうすればよいですか?

次のコマンドは、次のようになります。

sed -r 's!@(.*)!_\1@generic.com!' FILE

peter_yahoo.com@generic.com
peter_hotmail.co.in,i am peter,i am peter@generic.com

そして、次のcmdは「peter@yahoo.com」では機能しません。

sed -r 's!@(.*)(,.*)!_\1@generic.com!' FILE

ありがとう!!

4

3 に答える 3

0

次のコマンドで複数のコマンドを実行できます。

sed -e cmd -e cmd

また

sed -e cmd;cmd

したがって、あなたの場合、あなたは次のことができます:

sed -e 's/@/_/' -e 's/_.*/_generic.com/' filename

しかし、それはただ行うほうが簡単なようです

sed 's/@.*/_generic.com/' filename
于 2012-06-05T18:25:34.457 に答える
0
sed 's/\(.*\)@\(.*\)\..*/\1_\2@generic.com/'

括弧で囲ま\(.*\)れた式は、正規表現の一部を記憶するために使用されます。「\1」は最初に記憶されるパターンであり、「\2」は2番目に記憶されるパターンです。

\(.*\)の前の式@は、電子メールID(peter、peter、philip)の先頭を記憶するために使用されます。

\(.*\)\.後の式@は、電子メールID(yahoo、hotmail、gmail)の終了を記憶するために使用されます。言い換えれば、それは言う:との間@で何かを取る.

最後の式.*は、電子メールID(.com、.co.in、.co.in)のすべての末尾の記号と一致するために使用されます。

于 2012-06-05T18:26:02.473 に答える
0

ゴルフ=)

$ cat FILE
Example,
peter@yahoo.com
peter@hotmail.co.in
philip@gmail.com

$ sed -r 's!@(.*)!_\1@generic.com!' FILE
Example,
peter_yahoo.com@generic.com
peter_hotmail.co.in@generic.com
philip_gmail.com@generic.com

user1428900への返信として、これはいくつかの説明です。

sed -r          # sed in extended regex mode
s               # substitution
!               # my delimiter, pick up anything you want instead !part of regex
@(.*)           # a literal "@" + capture of the rest of the line
!               # middle delimiter
_\1@generic.com # an "_" + the captured group N°1 + "@generic.com"
!               # end delimiter
FILE            # file-name

拡張モードは実際には必要ありません。BRE(基本的な正規表現)モードで同じ次のスニペットを検討してください。

 sed 's!@\(.*\)!_\1@generic.com!' FILE

新しいニーズに合わせて編集します。

$ cat FILE
Example,
peter@yahoo.com,I am peter
peter@hotmail.co.in
philip@gmail.com


$ sed -r 's!@(.*),.*!_\1@generic.com!' FILE
Example,
peter_yahoo.com@generic.com
peter@hotmail.co.in
philip@gmail.com

電子メールの行だけが必要な場合は、次のようにすることができます。

sed -r '/@/s!@(.*),.*!_\1@generic.com!' FILE

この/@/部分は、文字を含む行でのみ機能することを意味します@

Edit2

あなたがあなたの新しいコメントが言ったようにエンドラインを維持したいなら:

sed -r 's!@(.*)(,.*)!_\1@generic.com\2!' FILE
于 2012-06-05T18:36:20.917 に答える