如何使用外壳脚本或 SED 从 user1@10.129.12.121 打印 user1



我想通过shell脚本打印整个地址的名称。所以user1@12.12.23.234应该给出输出"user1",类似地,11234@12.123.12.23应该给出输出11234

从终端读取:

$ IFS=@ read user host && echo "$user"
<user1@12.12.23.234>
user1

从变量读取:

$ address='user1@12.12.23.234'
$ cut -d@ -f1 <<< "$address"
user1
$ sed 's/@.*//' <<< "$address"
user1
$ awk -F@ '{print $1}' <<< "$address"
user1

使用 bash 就地编辑:

EMAIL='user@server.com'
echo "${EMAIL%@*}

这是一个内置的 Bash,所以它可能不是很便携(例如,如果它没有链接到/bin/bash,它就不会与sh一起运行),但它可能更快,因为它不会分叉一个进程来处理编辑。

使用 sed:

echo "$EMAIL" | sed -e 's/@.*//'

这告诉 sed 替换 @ 字符以及它可以在它之后找到的尽可能多的字符,直到行尾,即。 删除@后的所有内容。

如果您在一个文件中存储了多封电子邮件,则此选项可能会更好,然后您可以执行以下操作

sed -e 's/@.*//' emails.txt > users.txt

希望这有帮助=)

我倾向于使用expr来做这种事情:

address='user1@12.12.23.234'
expr "$address" : '([^@]*)'

这是expr的模式匹配和提取功能的用途。翻译过来,上面说:请打印出不包含@的最长$address前缀。

expr工具由 Posix 覆盖,因此它应该非常便携。

请注意,expr的某些历史版本会将带有前导-的论点解释为一种选择。如果你关心防止这种情况,你可以在字符串的开头添加一个额外的字母,并避免匹配它,如下所示:

expr "x$address" : 'x([^@]*)'

相关内容

  • 没有找到相关文章

最新更新