我有这个
awk -F=":" -v RS="," '$1~/"name"/ {print}' | sed -e 's/^.*"name"[ ]*:[ ]*"//' -e 's/".*//'`
user1 user2 user3 user4 user5我试图添加一种方法,在它自己的线路上创建每一个匹配,而不是并排。
user1
user2
user3
user4
user5作为奖励,有没有办法告诉awk和sed跳过"name“的第一场比赛?
这是api的输出。
{
"name": "users",
"self": "http://",
"users": {
"size": 5,
"items": [
{
"self": "http://",
"name": "admin",
"emailAddress": "admin@example.com",
"avatarUrls": {
},
"displayName": "admin",
"active": true
},
{
"self": "http://",
"name": "user1",
"emailAddress": "user1@example.com",
"avatarUrls": {
},
"displayName": "user1",
"active": true
},
{
"self": "http://",
"name": "user2",
"emailAddress": "user2@example.com",
"avatarUrls": {
},
"displayName": "user2",
"active": true
},
{
"self": "http://",
"name": "user3",
"emailAddress": "user3@example.com",
"avatarUrls": {
},
"displayName": "user3",
"active": true
}
],
"max-results": 50,
"start-index": 0,
"end-index": 3
},
"expand": "users"
}发布于 2014-10-03 20:59:10
只使用awk来解释示例json数据:
$ awk -F: -v RS="," '$1~/"name"/ && f {gsub("[ \",]", "", $2); print $2} $1~/"name"/{f=1}' json
admin
edwin
niwde
other由于name标志f,跳过了第一个匹配的f。
对awk代码的解释:
$1~/"name"/ && f {gsub("[ \",]", "", $2); print $2}
这包括一个条件和一组语句。该条件要求第一个字段与"name"匹配,并且标志f为非零。如果满足这两个条件,则从同一个第二个字段中移除空格、引号和逗号,并打印第二个字段。
在awk中,变量的默认值为零(或空白)。因此,除非我们为f分配一个非零值,否则不会打印任何内容。$1~/"name"/{f=1}
如果第一个字段在"name"上匹配,则标志f设置为1。因此,直到第一个name字段出现之后,f才会被设置为1。因此,名字字段将不会被打印,而是在它之后全部打印出来。https://stackoverflow.com/questions/26186496
复制相似问题