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}'
,如果您不介意使用python
catx.json | python-c import sys,json;d=json.load(sys.stdin.read());打印(d[“cast”][1][“id”];)