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

时间:2012-08-07 16:15:12

标签: regex linux grep

我在一个文件中有一串文字我正在解析,我几乎得到它但不确定我缺少什么

我正在使用的基本表达是

cat cred.txt | grep -m 1 -o '&CD=[^&]*'

我收到

的结果
&CD=u8AA-RaF-97gc_SdZ0J74gc_SdZ0J196gc_SdZ0J211

在结果字符串中不希望&CD=部分,我该怎么做。

我正在解析的字符串是:

webpage.asp?UserName=username&CD=u8AA-RaF-97gc_SdZ0J74gc_SdZ0J196gc_SdZ0J211&Country=USA

2 个答案:

答案 0 :(得分:3)

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

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

如果不是:

sed '1s/.*&CD=\([^&]*\).*/\1/' cred.txt

答案 1 :(得分:0)

为这只猫皮肤涂抹的方法很多。

扩展你的管道:

grep -o 'CD=[^&]*' cred.txt | cut -d= -f2

或者在sed中进行替换:

sed -r 's/.*[&?]CD=([^&]*).*/\1/' cred.txt

或者真的很想要解析awk中的实际QUERY_STRING:

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