我在 BASH 中有以下字符串,我需要在行尾的电子邮件地址
TAG instance i-1846f265 AdminEmail dummy.email@domain.com
据我所知,单词之间的间距始终是单个制表符,末尾的电子邮件地址没有固定长度(可以是任意数量的地址之一)
cut -f4
应该管用。如果是文件,cut -f4 file
. 如果是字符串,cut -f <<<"$string"
如果它在脚本中,那么这个(只是 bash,没有外部的东西)有效
line='TAG instance i-1846f265 AdminEmail dummy.email@domain.com'
set -- $line
echo "email address is " $5
有很多方法可以像这样分割一条线。 cut
如前所述awk
,sed
您可以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
如果列号不确定,导致 cut 不可靠,您可以对看起来像电子邮件的内容执行正则表达式 grep。
echo "TAG instance i-1846f265 AdminEmail dummy.email@domain.com" | grep -o -e "[._a-zA-Z0-9-]\+*@[._a-zA-Z0-9-]\+"
当我看到“提取”时,我想到了grep
grep -o '\S*$' file
您可以将字符串读入数组并删除结束前的所有字段:
read -a fields <<< 'TAG instance i-1846f265 AdminEmail dummy.email@domain.com'
echo "${fields[@]: -1}"
dummy.email@domain.com
如果标签描述很重要,您可以IFS=$'\t'
在阅读前设置以保证标签上的分词。
你有没有尝试过:
echo $STRING | awk '{ print $NF }'
或者cut
按照上面的建议使用