Unix Sed获取两个单词之间的文本
如何获取Unix Sed获取两个单词之间的文本,unix,sed,Unix,Sed,如何获取“total”之间的文本:和,“issues”,简而言之,我需要从下面的文件中获取3004编号 Cat test1 {"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues": 从上面的文件中提取3004的确切命令是什么?如果您真的想使用sed,那么 sed -e 's/.*\"total\":\([0-9]*\).*/\1/' 我们应该做到这一点。 如果您想解析JSON,请使用JSON解析器。
“total”之间的文本:
和,“issues”
,简而言之,我需要从下面的文件中获取3004
编号
Cat test1
{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":
从上面的文件中提取
3004
的确切命令是什么?如果您真的想使用sed
,那么
sed -e 's/.*\"total\":\([0-9]*\).*/\1/'
我们应该做到这一点。
如果您想解析JSON,请使用JSON解析器。因为您标记了
unix
,我想您没有grep
和PCRE
。您可以使用下面的perl
一行程序,不过正如其他人所建议的那样,最好使用json
解析器
perl:
grep和PCRE:
$echo'{“expand”:“schema,names”,“startAt”:0,“maxResults”:2,“total”:3004,“issues”:
grep-oP'(?听起来像是XY问题。您正在尝试解析JSON吗?
$ echo '{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":' |
perl -nle 'print $1 if /(?<="total":)([0-9]+)(?=,"issues")/'
3004
$ echo '{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":' |
perl -nle 'print $1 if /(?<="total":)([0-9]+)/'
3004
$ echo '{"expand":"schema,names","startAt":0,"maxResults":2,"total":3004,"issues":' |
grep -oP '(?<="total":)[0-9]+'
3004