我在BASH中有以下字符串,我需要行末的电子邮件地址
TAG instance i-1846f265 AdminEmail dummy.email@domain.com
据我所知,单词之间的间距始终是单个制表符,最后的电子邮件地址没有固定的长度(可以是任意数量的地址之一)
答案 0 :(得分:4)
cut -f4
应该有效。如果是文件cut -f4 file
。如果是字符串,cut -f <<<"$string"
答案 1 :(得分:3)
如果它在脚本中,那么这个(只是bash,没有外部的东西)工作
line='TAG instance i-1846f265 AdminEmail dummy.email@domain.com'
set -- $line
echo "email address is " $5
有很多方法可以像这样划分一条线。如上所述cut
,awk
,sed
答案 2 :(得分:2)
您可以将cut
用于此目的:
$ cut -f4 -d$'\t' your_file
print 4th field set tab as delimiter
更短的:
$ cut -f4 -d$'\t' your_file
如果是字符串,
$ echo "your_strin" | cut -f4 -d$'\t' your_file
答案 3 :(得分:0)
如果列号不确定,使切割不可靠,您可以对看起来像电子邮件的内容执行regexp grep。
echo "TAG instance i-1846f265 AdminEmail dummy.email@domain.com" | grep -o -e "[._a-zA-Z0-9-]\+*@[._a-zA-Z0-9-]\+"
答案 4 :(得分:0)
当我看到“摘录”时,我想到grep
grep -o '\S*$' file
答案 5 :(得分:0)
您可以将字符串读入数组并在结束前删除所有字段:
read -a fields <<< 'TAG instance i-1846f265 AdminEmail dummy.email@domain.com'
echo "${fields[@]: -1}"
dummy.email@domain.com
如果标签描述很重要,您可以在阅读前设置IFS=$'\t'
以保证标签上的字词分割。
答案 6 :(得分:-1)
你试过了吗?
echo $STRING | awk '{ print $NF }'
或按上述建议使用cut