我有一个非常冗长的字符串(长度也不固定) 我想提取一个位于'email'和'@ gmail.com'
之间的子串假设它是
xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc
我想在String中提取'substring'.. 我可以使用正则表达式,使用sed工具执行此操作。?
答案 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