Bash 获取特定字段';使用awk、sed和grep的文本值
我想使用Bash 获取特定字段';使用awk、sed和grep的文本值,bash,awk,sed,Bash,Awk,Sed,我想使用sed、awk、grep或类似工具获取以下文本的名称字段值 { "cast": [ { "character": "", "credit_id": "52532e3119c29579400012b5", "gender": null, "id": 23629, "name": "Brian O'Halloran", "or
sed
、awk
、grep
或类似工具获取以下文本的名称字段值
{
"cast": [
{
"character": "",
"credit_id": "52532e3119c29579400012b5",
"gender": null,
"id": 23629,
"name": "Brian O'Halloran",
"order": 0,
"profile_path": "/eJsLxovTdcm6QK9PDB2pCe5FMqK.jpg"
},
{
"character": "",
"credit_id": "52532e3119c2957940001315",
"gender": null,
"id": 19302,
"name": "Jason Mewes",
"order": 1,
"profile_path": "/so3nT2vgSCZMO2QXDVHF3ubxaFX.jpg"
},
{
"character": "",
"credit_id": "52532e3119c295794000133d",
"gender": null,
"id": 23630,
"name": "Jeff Anderson",
"order": 2,
"profile_path": "/vjt5WhpJAx0jxvmiGc5PAOBzzb7.jpg"
},
{
"character": "Silent Bob",
"credit_id": "52532e3219c2957940001359",
"gender": null,
"id": 19303,
"name": "Kevin Smith",
"order": 4,
"profile_path": "/3XXThSMqHQgQFjM4bMJ25U1EJTj.jpg"
}
],
"crew": [
{
"credit_id": "55425dbe9251410efa000094",
"department": "Visual Effects",
"gender": null,
"id": 1419667,
"job": "Animation Manager",
"name": "Richard J. Gasparian",
"profile_path": null
},
{
"credit_id": "5544521dc3a3680ce60037e8",
"department": "Art",
"gender": null,
"id": 1450356,
"job": "Background Designer",
"name": "Tristin Cole",
"profile_path": null
},
{
"credit_id": "554a142dc3a3683c84001851",
"department": "Art",
"gender": null,
"id": 1447432,
"job": "Background Designer",
"name": "Nadia Vurbenova",
"profile_path": null
},
{
"credit_id": "554bcd2b9251414692002c9b",
"department": "Production",
"gender": null,
"id": 1447493,
"job": "Location Manager",
"name": "Simon Rodgers",
"profile_path": null
},
{
"credit_id": "52532e3219c29579400013cd",
"department": "Production",
"gender": null,
"id": 19303,
"job": "Executive Producer",
"name": "Kevin Smith",
"profile_path": "/3XXThSMqHQgQFjM4bMJ25U1EJTj.jpg"
},
{
"credit_id": "52532e3319c2957940001405",
"department": "Production",
"gender": null,
"id": 59839,
"job": "Producer",
"name": "Harvey Weinstein",
"profile_path": "/k4UCnh7n0r5CEjq30gAl6QCfF9g.jpg"
},
{
"credit_id": "52532e3319c29579400014a7",
"department": "Production",
"gender": null,
"id": 1307,
"job": "Producer",
"name": "Bob Weinstein",
"profile_path": "/oe5Oxp034UOubnvZqqhurp6a1EP.jpg"
}
],
"id": 2
}
是处理JSON数据的正确工具:
获取所有name
键值:
jq '[.cast[], .crew[] | .name]' file
输出:
[
"Brian O'Halloran",
"Jason Mewes",
"Jeff Anderson",
"Kevin Smith",
"Richard J. Gasparian",
"Tristin Cole",
"Nadia Vurbenova",
"Simon Rodgers",
"Kevin Smith",
"Harvey Weinstein",
"Bob Weinstein"
]
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
要仅获取字符串列表,请使用以下命令:
jq '.cast[], .crew[] | .name' file
输出:
[
"Brian O'Halloran",
"Jason Mewes",
"Jeff Anderson",
"Kevin Smith",
"Richard J. Gasparian",
"Tristin Cole",
"Nadia Vurbenova",
"Simon Rodgers",
"Kevin Smith",
"Harvey Weinstein",
"Bob Weinstein"
]
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
要仅获取未加引号的
“
字符串列表,请添加-r
(--raw output
)选项:
是处理JSON数据的正确工具:
获取所有name
键值:
jq '[.cast[], .crew[] | .name]' file
输出:
[
"Brian O'Halloran",
"Jason Mewes",
"Jeff Anderson",
"Kevin Smith",
"Richard J. Gasparian",
"Tristin Cole",
"Nadia Vurbenova",
"Simon Rodgers",
"Kevin Smith",
"Harvey Weinstein",
"Bob Weinstein"
]
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
要仅获取字符串列表,请使用以下命令:
jq '.cast[], .crew[] | .name' file
输出:
[
"Brian O'Halloran",
"Jason Mewes",
"Jeff Anderson",
"Kevin Smith",
"Richard J. Gasparian",
"Tristin Cole",
"Nadia Vurbenova",
"Simon Rodgers",
"Kevin Smith",
"Harvey Weinstein",
"Bob Weinstein"
]
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
要仅获取未加引号的
“
字符串列表,请添加-r
(--raw output
)选项:
另一种
jq
方法:
jq '.[]?|.[]?|.name' file
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
注意:当
不是数组或对象时,.foo?
用法甚至不会输出错误。另一种jq
方法:
jq '.[]?|.[]?|.name' file
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
注意:当
不是数组或对象时,.foo?
用法甚至不会输出错误。Helo buddy,使用awk只需执行以下操作:
awk '/name/{gsub("[\",]*", "");print $2}' yourFile.txt
致以最良好的祝愿!!;) Helo buddy,和awk一起做吧:
awk '/name/{gsub("[\",]*", "");print $2}' yourFile.txt
致以最良好的祝愿!!;) 在这里也尝试以下awk解决方案 第一种方法:以防您需要在名称和值周围设置双航向
awk -F'[:,]' '/name/{sub(/^ +/,"",$2);print $2}' Input_file
第二种方法:如果您只需要名称的值,那么以下方法可能会对您有所帮助
awk -F'[":,]' '/name/{print $5}' Input_file
第一种方法的解释:只需将(:和,)作为字段分隔符,然后在包含字符串的行中查找字符串名称,然后将第二个字段的初始空格替换为NULL,然后打印第二个字段的值
第二种方法的解释:将(“:和,”)作为字段分隔符。然后在一行中搜索字符串名称(如果有),然后打印该行的第五个字段。在此处尝试使用以下另一种awk解决方案 第一种方法:以防您需要在名称和值周围设置双航向
awk -F'[:,]' '/name/{sub(/^ +/,"",$2);print $2}' Input_file
第二种方法:如果您只需要名称的值,那么以下方法可能会对您有所帮助
awk -F'[":,]' '/name/{print $5}' Input_file
第一种方法的解释:只需将(:和,)作为字段分隔符,然后在包含字符串的行中查找字符串名称,然后将第二个字段的初始空格替换为NULL,然后打印第二个字段的值
第二种方法的解释:将(“:和,”)作为字段分隔符。然后在一行中搜索字符串名称(如果有),然后打印该行的第5个字段。您应该解析JSON文件,而不是使用正则表达式 您可以使用Ruby执行以下操作:
$ ruby -0777 -r json -lane '
d=JSON.parse($_)
(d["cast"]+d["crew"]).each { |x| p x["name"] }' json
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
或者,如果您想将演员与剧组分开:
$ ruby -0777 -r json -lane '
d=JSON.parse($_)
%w(cast crew).each {|w|
puts "#{w.capitalize}:"
(d[w]).each { |x| puts "\t#{x["name"]}" }}' json
Cast:
Brian O'Halloran
Jason Mewes
Jeff Anderson
Kevin Smith
Crew:
Richard J. Gasparian
Tristin Cole
Nadia Vurbenova
Simon Rodgers
Kevin Smith
Harvey Weinstein
Bob Weinstein
您应该解析JSON文件,而不是使用正则表达式 您可以使用Ruby执行以下操作:
$ ruby -0777 -r json -lane '
d=JSON.parse($_)
(d["cast"]+d["crew"]).each { |x| p x["name"] }' json
"Brian O'Halloran"
"Jason Mewes"
"Jeff Anderson"
"Kevin Smith"
"Richard J. Gasparian"
"Tristin Cole"
"Nadia Vurbenova"
"Simon Rodgers"
"Kevin Smith"
"Harvey Weinstein"
"Bob Weinstein"
或者,如果您想将演员与剧组分开:
$ ruby -0777 -r json -lane '
d=JSON.parse($_)
%w(cast crew).each {|w|
puts "#{w.capitalize}:"
(d[w]).each { |x| puts "\t#{x["name"]}" }}' json
Cast:
Brian O'Halloran
Jason Mewes
Jeff Anderson
Kevin Smith
Crew:
Richard J. Gasparian
Tristin Cole
Nadia Vurbenova
Simon Rodgers
Kevin Smith
Harvey Weinstein
Bob Weinstein
这看起来像JSON-使用
jq
希望这不是一个家庭作业问题!如果你对使用python没问题的话,试试grep-oE“name[^,]*,“|sed-e's/”//g'-e's/,//g'-awk-F:{print$2}”
。cat x.json | python-c import sys,json;d=json.loads(sys.stdin.read());print(d[“cast”][1][id”];
看起来像json-使用jq
希望这不是一个家庭作业问题!试试grep-oE-name[]*,“|sed-e's/”//g'-e's/,//g'|awk-F:'{print$2}'
,如果您不介意使用pythoncatx.json | python-c import sys,json;d=json.load(sys.stdin.read());打印(d[“cast”][1][“id”];)