【问题标题】:How to separate the matched output for every search block如何分离每个搜索块的匹配输出
【发布时间】:2020-11-03 16:13:15
【问题描述】:

如何为每个搜索块分离匹配的输出

$ az resource list -ojson |egrep  "changedTime|createdTime|resourceGroup|Environment|name"
   "changedTime": "2020-09-15T08:26:43.838097+00:00",
    "createdTime": "2020-09-15T08:16:43.311725+00:00",
    "name": "AzureBackup_1",
    "resourceGroup": "AzureBackupRG_westus2_1",
    "changedTime": "2020-09-16T17:54:18.501492+00:00",
    "createdTime": "2020-09-16T17:44:18.069150+00:00",
    "name": "AzureBackup_2",
    "resourceGroup": "AzureBackupRG_westus2_1",

尝试了什么:

$ az resource list -ojson |egrep  "changedTime|createdTime|resourceGroup|Environment|name" --group-separator="SEP"

但以上不起作用...

期望:

   "changedTime": "2020-09-15T08:26:43.838097+00:00",
    "createdTime": "2020-09-15T08:16:43.311725+00:00",
    "name": "AzureBackup_1",
    "resourceGroup": "AzureBackupRG_westus2_1",

    "changedTime": "2020-09-16T17:54:18.501492+00:00",
    "createdTime": "2020-09-16T17:44:18.069150+00:00",
    "name": "AzureBackup_2",
    "resourceGroup": "AzureBackupRG_westus2_1",

【问题讨论】:

  • 由于您正在使用 JSON,因此您应该考虑使用会说 JSON 的工具,例如 jq
  • 我们看不到的是输入。

标签: linux awk grep


【解决方案1】:

你可以试试:

az resource list -ojson | egrep  "changedTime|createdTime|resourceGroup|Environment|name|^  \}," | awk '/  \}/{$0=""} 1'

egrep 行上的^ \}, 标记块的结尾。

awk 命令然后用空字符串替换该行。

【讨论】:

  • 这很好用,你能解释一下这里的 awk 工作吗?
【解决方案2】:

试试:

az resource list -ojson | awk '/changedTime|createdTime|Environment|name/ { print $0 } /resourceGroup/ { print $0"\n" }'

获取 Azure CLI 命令的输出并通过 awk 进行管道传输,从而不再需要 egrep。当找到文本“resourceGroup”时,打印行 ($0) 后跟新行,否则我们只打印所需标签的行,例如 changedTime、createdTime、Environment 和 name。

【讨论】:

  • /a/ || /b/ = /a|b/。此外,$0=$0(以及整个/foo/ || /bar/... {$0=$0} 语句)在这种情况下完全没有任何作用。
  • 我已经修改并意识到 1 将打印 az 命令中的所有行,因此已将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2018-09-22
  • 2013-09-11
  • 2010-10-05
相关资源
最近更新 更多