我有一个很长的字符串(长度也不固定)我想提取一个位于“电子邮件”和“@gmail.com”之间的子字符串
假设它是
xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc
我想提取字符串中的“子字符串”。我可以使用正则表达式,使用 sed 工具来做到这一点吗?
perl -lne 'print $1 if(/email:(.*?)\@gmail.com/)'
测试如下:
> echo "xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc" | perl -lne 'print $1 if(/email:(.*?)\@gmail.com/)'
substring
>
VALUE="xhxjcndjcnkjcnd cjkjcdckjncx 电子邮件:substring@gmail.comjndhcjkdhcnchjdccb djc"
回声 $VALUE | awk -F":" '{打印 $2}' |cut -d@ -f1
外壳可以处理这个:
$ line='xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc'
$ name=${line#*email:} # remove the prefix ending with "email:"
$ name=${name%@gmail.com*} # remove the suffix starting with "@gmail.com"
$ echo $name
substring
Using sed
:
INPUT="xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
USERNAME=$(sed -n "s/.*\email:\(.*\)@gmail\.com.*/\\1/p" <<< $INPUT)
echo $USERNAME
其他awk
awk -F":" '{split($2,a,"@");print a[1]}' file
substring
如果你有很多行来搜索 gmail 地址
awk -F":" '/gmail\.com/ {split($2,a,"@");print a[1]}'
substring
我认为 grep (积极向前看和积极向后看)是这项工作的正确工具:
$ grep -oP '(?<=email:).*?(?=@gmail\.com)'<<< "xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
substring