Linux中从冒号分隔的键值对中提取值部分

Linux中从冒号分隔的键值对中提取值部分

我需要arn:aws:sns:us-west-2:596873354795:demo使用命令从文件中获取以下内容sed。命令是什么?

样本文件:

{
    "TopicArn": "arn:aws:sns:us-west-2:596873354795:demo"
}

答案1

您的示例文件采用结构化格式,称为JSONsed不是处理此类文件的便捷工具。而是安装 JSON 格式的解析器,例如jq

要在 Debian 系列 Linux 上安装:

sudo apt-get install jq

要在 Red Hat 系列 Linux 上安装:

sudo yum install jq

对于其他发行版和平台,请检查这一页


然后执行:

cat sample_file | jq -r '.["TopicArn"]'

要得到:

arn:aws:sns:us-west-2:596873354795:demo

检查中的示例jq手册用于从更复杂的文件中检索。

答案2

如果您熟悉 sed、grep、awk 等面向行的工具,并且只想简单地提取键/值对,那么您可能会发现jsonpipe使用它比jq.

默认情况下,键被打印为/- 分隔的路径,并通过制表符与值分隔。

例如

$ json='{"TopicArn": "arn:aws:sns:us-west-2:596873354795:demo"}'

$ echo "$json" | jsonpipe 
/   {}
/TopicArn   "arn:aws:sns:us-west-2:596873354795:demo"

$ echo "$json" | jsonpipe | awk -F'\t' '$1 == "/TopicArn" {print $2}'
"arn:aws:sns:us-west-2:596873354795:demo"

其 debian 包的详细信息:

包:python-jsonpipe

Description-en: 将 JSON 转换为 UNIX 友好的基于行的格式

jsonpipe 遍历 JSON 对象并生成简单的、基于行的文本格式,该格式可以由所有您喜爱的 UNIX 工具(如 grep、sed、awk、cut 和 diff)进行处理。它在编程语言中也可能很有价值——事实上,它最初被认为是一种针对 JSON 输出编写简单测试断言的方法,而不会将测试与所使用的特定结构过于紧密地耦合。

主页:http://pypi.python.org/pypi/jsonpipe

相关内容