sed用于获取2个单词之间的文本

时间:2013-07-22 22:40:15

标签: unix sed

如何在"total":, "issues"之间提取文字,简而言之,我需要从下面的文件中提取3004个数字。

Cat test1

{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":

从上述文件中获取3004的确切命令是什么?

2 个答案:

答案 0 :(得分:0)

如果你真的想使用sed,而不是

sed -e 's/.*\"total\":\([0-9]*\).*/\1/'

应该做的伎俩。 如果要解析JSON,请使用JSON解析器。

答案 1 :(得分:0)

由于您标记为unix,我猜您没有grep PCRE。您可以使用以下perl单行,但其他人建议最好使用json解析器。

perl:

$ echo '{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":' | 
perl -nle 'print $1 if /(?<="total":)([0-9]+)(?=,"issues")/'
3004

如果你没有多少"total":,那么以下就足够了:

$ echo '{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":' | 
perl -nle 'print $1 if /(?<="total":)([0-9]+)/'
3004

grep with PCRE:

$ echo '{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":' | 
grep -oP '(?<="total":)[0-9]+'
3004