1

我有一个 csv 文件,我想用 .example.com 附加所有电子邮件。结果将是 foo@bar.com.example.com 我想从终端使用 sed 命令执行此操作,但我无法弄清楚正确的语法是什么。例子:

email1@foo.bar;name1;surname1
email3@foo.bar;name2;surname2
email3@foo.bar;name3;surname3

应该成为

email1@foo.bar.example.com;name1;surname1
email3@foo.bar.example.com;name2;surname2
email3@foo.bar.example.com;name3;surname3

我尝试使用sed -i "" -e 's/\(@[A-Z0-9.-]+\.[A-Z]{2,4}\)/\1.example.com/g'file.csv 但它不起作用

4

4 回答 4

1

我刚刚注意到标签,这意味着您正在使用 BSD sed。你需要-E旗帜来完成这项+工作:

$ cat > file

email1@foo.bar;name1;surname1
email3@foo.bar;name2;surname2
email3@foo.bar;name3;surname3

$ sed -E 's/(@[a-zA-Z0-9.-]+)/\1.example.com/' file

email1@foo.bar.example.com;name1;surname1
email3@foo.bar.example.com;name2;surname2
email3@foo.bar.example.com;name3;surname3

您的字符类还需要检查a-z以及A-Z,因为它们默认区分大小写。

参考:如何在 mac os x (BSD) sed 上转义加号?

于 2013-01-19T14:34:33.030 回答
1

您可以在第一个分号前插入文本:

sed 's/;/.example.com;/'
于 2013-01-19T16:18:09.320 回答
0

尝试这个

sed -re 's/(\w+@\w+.\w+)/\11.example.com/g' temp.txt

于 2013-01-20T06:43:06.217 回答
0

我想我找到了解决方案: sed -i ".bkp" -E "s/(@[a-zA-Z0-9.-]+)/&.example.com/g" file.csv

于 2013-01-19T14:40:37.923 回答