grep regex在两个已知字符串之间拉出一个字符串

grep regex在两个已知字符串之间拉出一个字符串,regex,linux,grep,Regex,Linux,Grep,我正在解析一个文件中的一个文本字符串,我几乎得到了它,但不确定丢失了什么 我使用的基本表达式是 cat cred.txt | grep-m 1-o'&CD=[^&]*' 我得到了一个结果 &CD=u8AA-RaF-97gc_SdZ0J74gc_SdZ0J196gc_SdZ0J211 我不想在结果字符串中包含&CD=部分,我将如何做到这一点 我正在分析的字符串是: webpage.asp?用户名=用户名和CD=u8AA-RaF-97gc_SdZ0J74gc_SdZ0J196gc_SdZ0J21

我正在解析一个文件中的一个文本字符串,我几乎得到了它,但不确定丢失了什么

我使用的基本表达式是

cat cred.txt | grep-m 1-o'&CD=[^&]*'
我得到了一个结果

&CD=u8AA-RaF-97gc_SdZ0J74gc_SdZ0J196gc_SdZ0J211
不想在结果字符串中包含
&CD=
部分,我将如何做到这一点

我正在分析的字符串是:

webpage.asp?用户名=用户名和CD=u8AA-RaF-97gc_SdZ0J74gc_SdZ0J196gc_SdZ0J211和国家=美国

如果您的
grep
知道Perl正则表达式:

grep -m 1 -oP '(?<=&CD=)[^&]*' cred.txt

给这只猫剥皮有很多方法

延伸管道:

grep -o 'CD=[^&]*' cred.txt | cut -d= -f2
或者在sed中进行替换:

sed -r 's/.*[&?]CD=([^&]*).*/\1/' cred.txt
或者,用awk解析实际的查询字符串:

awk -F'?' '{ split($2, a, "&"); for(i in a){split(a[i], kv, "="); out[kv[1]]=kv[2];} print out["CD"];}'
awk -F'?' '{ split($2, a, "&"); for(i in a){split(a[i], kv, "="); out[kv[1]]=kv[2];} print out["CD"];}'