使用linux子字符串bash从电子邮件中删除域

我想从电子邮件中提取用户名。示例:johndoe@gmail.com 域将始终为@gmail.com,但用户名的长度可以不同但我必须在 linux bash 中使用子字符串(无 grep、sed、cut 等),例如:

str="johndoe@gmail.com"
echo ${str:position:length}

或者可能使用如下循环:

length=`expr length "$str"`
for ((i=0; i<$length; i++))
do
    echo ${str:$i:length}
done

问题是,我应该在位置和长度上写什么。代码如何知道我是否需要提取“@”之前的所有字母。任何的想法?谢谢!

回答

与其担心位置,不如从头@开始删除所有内容。

$ str="johndoe@gmail.com"
$ echo "${str%@*}"
johndoe

旁注:通常最好用于printf '%sn'安全地打印未知数据,但我假设这些是有效的 Gmail 用户名,它们已经是安全的,所以没问题echo。格式类似于[a-z0-9][a-z0-9.]{4,28}[a-z0-9](正则表达式)。


以上是使用linux子字符串bash从电子邮件中删除域的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>