Bash剪切并删除字符

时间:2015-03-23 22:17:10

标签: bash

以下是用户电子邮件,例如...

mburkhar@imap1.tech.com

我想删除mburkhar并删除电子邮件中的imap.,使其在新文件中显示为此内容。我已经研究了一段时间,但有很多不同的命令我很困惑,我应该用于这个问题。

mburkhar mburkhar@tech.com

3 个答案:

答案 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