在shell脚本中搜索字符串中的子字符串

时间:2013-09-20 10:40:31

标签: regex string shell sed

我有一个非常冗长的字符串(长度也不固定) 我想提取一个位于'email'和'@ gmail.com'

之间的子串

假设它是

xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc

我想在String中提取'substring'.. 我可以使用正则表达式,使用sed工具执行此操作。?

6 个答案:

答案 0 :(得分: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
>

答案 1 :(得分:1)

  

VALUE =“xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc”

     

回显$ VALUE | awk -F“:”'{print $ 2}'| cut -d @ -f1

答案 2 :(得分:1)

使用sed

INPUT="xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
USERNAME=$(sed -n "s/.*\email:\(.*\)@gmail\.com.*/\\1/p" <<< $INPUT)
echo $USERNAME

答案 3 :(得分:1)

另一个awk

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

您有很多行可以搜索Gmail地址

awk -F":" '/gmail\.com/ {split($2,a,"@");print a[1]}'
substring

答案 4 :(得分:1)

shell可以处理:

$ 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

答案 5 :(得分:0)

我认为grep(积极的前瞻和积极的外观)是这项工作的正确工具:

$ grep -oP '(?<=email:).*?(?=@gmail\.com)'<<< "xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
substring