我有这个
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跳过“名字”的第一场比赛?
这是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"
}
答案 0 :(得分:2)
仅使用awk
来解释样本json数据:
$ awk -F: -v RS="," '$1~/"name"/ && f {gsub("[ \",]", "", $2); print $2} $1~/"name"/{f=1}' json
admin
edwin
niwde
other
由于标记为name
,因此会跳过f
的第一个匹配。
awk
代码的说明:
$1~/"name"/ && f {gsub("[ \",]", "", $2); print $2}
这包括一个条件和一组语句。条件要求第一个字段匹配"name"
和标记f
非零。如果满足这两个条件,则从同一第二个字段中删除空格,引号和逗号,并打印第二个字段。
在awk
中,变量的默认值为零(或空白)。因此,在我们为f
指定非零值之前,不会打印任何内容。
$1~/"name"/{f=1}
如果第一个字段与"name"
匹配,则标记f
设置为1
。因此,在看到第一个名称字段之后,f
才会设置为1
。因此,第一个名称字段将不会被打印,但会被打印出来。
答案 1 :(得分:2)
你可以试试这个sed
sed -n '/"name": "/{s/ *"name": "\([^"]*\)",/\1/;p}' YourFile