以下是用户电子邮件,例如...
mburkhar@imap1.tech.com
我想删除mburkhar
并删除电子邮件中的imap.
,使其在新文件中显示为此内容。我已经研究了一段时间,但有很多不同的命令我很困惑,我应该用于这个问题。
mburkhar mburkhar@tech.com
答案 0 :(得分:2)
s=mburkhar@imap1.tech.com
s_name=${s%%@*}
s_adjusted=${s//@imap1./@}
echo "Name is $s_name; adjusted email address is $s_adjusted"
运行时,会输出:
名字是mburkhar;调整后的电子邮件地址为mburkhar@tech.com
...当然,对于您最初请求的输出,您可以
echo "$s_name $s_adjusted"
...或者,要将其作为单行实现,再假设变量$s
中的原始值:
echo "${s%%@*} ${s//@imap1./@}"
这些是parameter expansion操作,在内部执行bash,因此比使用任何外部进程(如sed)更有效。
答案 1 :(得分:1)
我会使用快速sed
脚本:
sed 's/\([^@]*\)@imap[0-2]\.\(.*\)$/\1 \1@\2/'
答案 2 :(得分:1)
您可以使用sed
命令执行此操作:
echo "mburkhar@imap1.tech.com" | sed -e 's/^\(.*\)@imap[^\.]*.\(.*\)/\1 \1@\2/'
mburkhar mburkhar@tech.com
这将捕获@
之前的部分,忽略imap
之后@
开头的任何字符串并捕获地址的结尾。
如果未找到imap
,则输出将如下:
echo "mburkhar@tech.com" | sed -e 's/^\(.*\)@imap[^\.]*.\(.*\)/\1 \1@\2/'
mburkhar@tech.com