1

我有一个很长的字符串(长度也不固定)我想提取一个位于“电子邮件”和“@gmail.com”之间的子字符串

假设它是

xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc

我想提取字符串中的“子字符串”。我可以使用正则表达式,使用 sed 工具来做到这一点吗?

4

6 回答 6

3
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
>
于 2013-09-20T10:51:21.667 回答
1

VALUE="xhxjcndjcnkjcnd cjkjcdckjncx 电子邮件:substring@gmail.comjndhcjkdhcnchjdccb djc"

回声 $VALUE | awk -F":" '{打印 $2}' |cut -d@ -f1

于 2013-09-20T10:52:26.680 回答
1

外壳可以处理这个:

$ 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
于 2013-09-20T15:57:40.530 回答
1

Using sed:

INPUT="xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
USERNAME=$(sed -n "s/.*\email:\(.*\)@gmail\.com.*/\\1/p" <<< $INPUT)
echo $USERNAME
于 2013-09-20T11:21:09.647 回答
1

其他awk

awk -F":" '{split($2,a,"@");print a[1]}' file
substring

如果你有很多行来搜索 gmail 地址

awk -F":" '/gmail\.com/ {split($2,a,"@");print a[1]}'
substring
于 2013-09-20T11:23:40.017 回答
0

我认为 grep (积极向前看和积极向后看)是这项工作的正确工具:

$ grep -oP '(?<=email:).*?(?=@gmail\.com)'<<< "xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
substring
于 2013-09-20T11:34:08.933 回答