非常に長い文字列があります (長さも固定されていません) 「email」と「@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
>
使用sed
:
INPUT="xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
USERNAME=$(sed -n "s/.*\email:\(.*\)@gmail\.com.*/\\1/p" <<< $INPUT)
echo $USERNAME
VALUE="xhxjcndjcnkjcnd cjkjcdckjncx メール:substring@gmail.comjndhcjkdhcnchjdccb djc"
エコー $VALUE | awk -F":" '{print $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
grep (肯定的な先読みと肯定的な後読みを使用) は、この仕事に適したツールだと思います。
$ grep -oP '(?<=email:).*?(?=@gmail\.com)'<<< "xhxjcndjcnkjcnd cjkjcdckjncx email:substring@gmail.comjndhcjkdhcnchjdccb djc"
substring