删除一行的第一部分,直到找到字符@

时间:2014-09-11 13:39:17

标签: linux bash shell sed

我有一个像这样的电子邮件列表:

aaa@you1.com
abc@you3.com
def@you4.com

我需要删除@符号前面的所有字符。有没有一种方法用Sed做这个?

3 个答案:

答案 0 :(得分:5)

sed 's/^.*@/@/' infile > outfile

答案 1 :(得分:5)

你可以使用grep,

$ grep -oE '@.*' file
@you1.com
@you3.com
@you4.com

答案 2 :(得分:4)

像这样:

$ sed 's/[^@]*//' file
@you1.com
@you3.com
@you4.com

基本的sed语法是sed 's/search/replace/' file。这会在search中查找file,并将其替换为replace文本。如果您想在该行的所有匹配项中执行此替换,则可以使用sed 's/search/replace/g' file

在这种情况下,我们正在寻找模式[^@]*,这意味着:所有字符都不是@。这将匹配行的开头,直到(排除)找到@。替换为//意味着此字符串将被替换为任何内容 - >除去。

要进行就地编辑,只需添加-i.bak即可。这样,您的原始文件将被替换,但也会创建备份file.bak

sed -i.bak 's/[^@]*//' file