使用 linux 子字符串 bash 从电子邮件中删除域
Remove domain from email using linux substring 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 '%s\n'
来安全地打印未知数据,但我假设这些是有效的 Gmail 用户名,它们已经是安全的,所以 echo
没问题。格式类似于 [a-z0-9][a-z0-9.]{4,28}[a-z0-9]
(正则表达式)。
我想从电子邮件中提取用户名。示例: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 '%s\n'
来安全地打印未知数据,但我假设这些是有效的 Gmail 用户名,它们已经是安全的,所以 echo
没问题。格式类似于 [a-z0-9][a-z0-9.]{4,28}[a-z0-9]
(正则表达式)。