请帮助使用 sed 命令来抓取特定文本

请帮助使用 sed 命令来抓取特定文本

我有一个 txt 文件,它是对 JIRA 的 api 调用的输出,该 JIRA 创建了一个任务。

在此文件中,我有以下文本(问题#可以更改):

"key":"JIRA-90"

我需要获取 JIRA-90,但似乎不知道如何使用 sed 来做到这一点。

JIRA-90 当然可以更改,因为这是 JIRA 中的问题类型。

答案1

sed -n 's/.*"key":"\([^"]*\)".*/\1/p' < your-file

使用通常的习惯用法:sed -n 's/pattern/replacement/p它会进行s替换,并且仅p在成功时才打印结果模式空间(n而不是在每个周期结束时打印模式空间,就像没有那样-n)。

答案2

假设您的输入文件包含超过 1 个名称/值对,请考虑以下内容:

$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{print f["key"]}' file
JIRA-90

这种方法允许您使用名称到值的映射填充数组(f[]上面),然后您可以随时按名称打印值。

$ cat file
        "foo":"127"
        "key":"JIRA-90"
        "bar":"hello world"

$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{print f["bar"], f["key"]}' file
hello world JIRA-90

$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{print f["foo"] * 3}' file
381

$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{for (i in f) print i "=" f[i]}' file
key=JIRA-90
foo=127
bar=hello world

相关内容