bash - bash 文本处理以删除 ascii 并从结果中获取唯一行
问题描述
在linux中,下面的命令
terraform providers
输出结果如下
.
├── provider[xxx.com/edu/xxxvenafi] 1.2.0
├── provider[registry.terraform.io/hashicorp/kubernetes] 2.3.2
├── provider[xxx.com/edu/xxxsmaas] 1.0.1
├── provider[registry.terraform.io/hashicorp/aws]
├── module.standard_deployment
│ ├── provider[xxx.com/edu/xxxsmaas] 1.0.1
│ ├── provider[xxx.com/edu/xxxvenafi] 1.2.0
│ ├── provider[registry.terraform.io/hashicorp/kubernetes]
│ └── provider[registry.terraform.io/hashicorp/local]
└── module.standand_ingress
├── provider[registry.terraform.io/hashicorp/kubernetes]
├── provider[xxx.com/edu/xxxsmaas] 1.0.1
├── provider[xxx.com/edu/xxxvenafi] 1.2.0
└── provider[registry.terraform.io/hashicorp/aws]
Providers required by state:
provider[xxx.com/edu/xxxsmaas]
provider[xxx.com/edu/xxxvenafi]
provider[registry.terraform.io/hashicorp/aws]
provider[registry.terraform.io/hashicorp/kubernetes]
从输出中删除这些树结构的最佳方法是什么?最终目标是仅列出以下唯一行,
provider[xxx.com/edu/xxxvenafi] 1.2.0
provider[xxx.com/edu/xxxsmaas] 1.0.1
解决方案
使用sed
and sort
,你可以试试这个
$ sed -E 's/.*(provider.*)/\1/g;/^[a-z]/!d' input_file | sort -u
provider[registry.terraform.io/hashicorp/aws]
provider[registry.terraform.io/hashicorp/kubernetes]
provider[registry.terraform.io/hashicorp/kubernetes] 2.3.2
provider[registry.terraform.io/hashicorp/local]
provider[xxx.com/edu/xxxsmaas] 1.0.1
provider[xxx.com/edu/xxxvenafi] 1.2.0
然而,这可能不是最有效的。
编辑
取自 Hai Vu 的评论,这里有一个适用于 OP 的 grep 替代方案。
terraform providers | grep -o 'provider.*[0-9][^]]*$' | sort -u
推荐阅读
- python - 填充熊猫数据框中缺少的复合索引
- email - 如何使用 App 脚本向 Google 表格的编辑者发送电子邮件
- linux - 使用 GCC 和 Clang 将 Wireshark 交叉编译到 ARM
- reactjs - 我如何在反应测试中模拟道具方法?
- rust - 如何在 actix-web 提取器中使用异步代码?
- python - 遍历 url 端点并将 json 转换为 pandas 数据帧
- python - Pandas:在数据框中创建列并通过查看另一个数据框为该列分配值
- docker - 如何运行打包为具有代码覆盖率的 Linux docker 容器的 Asp.Net Core 应用程序?
- powershell - 在 C 以外的任何内容上设置权限时出现 SET-ACL 问题:在 1 个特定服务器上的驱动器
- c# - C# - 如果出现错误 400,我如何获得 JSON 响应?(HttpRequest)