1

非常に長い文字列があります (長さも固定されていません) 「email」と「@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

使用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

VALUE="xhxjcndjcnkjcnd cjkjcdckjncx メール:substring@gmail.comjndhcjkdhcnchjdccb djc"

エコー $VALUE | awk -F":" '{print $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 に答える
0

grep (肯定的な先読みと肯定的な後読みを使用) は、この仕事に適したツールだと思います。

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