vim - 如何使用 vim、sed 或 awk 命令格式化和对齐文本?
问题描述
为了方便起见,我正在尝试对齐文件内容。所有分散的变量都在一行中。也是一阶最小的变量名。有人可以帮助我使用 sed、awk 或 VIM 编辑器实现这一目标吗?
实际文件内容
variable "key_name" {
default = ""
}
variable "vpc_id" {
default = ""
}
variable "name" {
default = ""
}
variable "ami" {
default = ""
}
variable "instance_type" {
default = ""
}
variable "name_suffix" {
default = ""
}
variable "additional_volume_size" {
default = ""
}
预期产出
variable "ami" { default = "" }
variable "name" { default = "" }
variable "vpc_id" { default = "" }
variable "key_name" { default = "" }
variable "name_suffix" { default = "" }
variable "instance_type" { default = "" }
variable "additional_volume_size" { default = "" }
解决方案
awk
和column
:_
awk 'BEGIN{RS="";FS="\n";OFS=" "}{$1=$1}1' file | column -t
输出:
variable "key_name" { default = "" }
variable "vpc_id" { default = "" }
variable "name" { default = "" }
variable "ami" { default = "" }
variable "instance_type" { default = "" }
variable "name_suffix" { default = "" }
variable "additional_volume_size" { default = "" }
如果您想按变量名称的长度对输出进行排序,您可以使用awk
, 管道输出长度,然后对长度进行排序和删除,如下所示:
awk 'BEGIN{RS="";OFS=" "}{$1=length($2)" "$1}1' file \
| sort -k1,1n \
| cut -d' ' -f2- \
| column -t
输出:
variable "ami" { default = "" }
variable "name" { default = "" }
variable "vpc_id" { default = "" }
variable "key_name" { default = "" }
variable "name_suffix" { default = "" }
variable "instance_type" { default = "" }
variable "additional_volume_size" { default = "" }
推荐阅读
- mysql - 使用联合与左连接的mysql子查询?
- python - 我可以使用 pyfpdf 在左边距添加行号吗
- sql-server - 如何在我的 sql server 数据库中删除重复的行
- sql - 如何找到一列的最后一个非空值并递归地找到另一列的总和值
- java - 如何为不同数据类型的不同类实现接口
- python - 需要 Python 正则表达式多个模式匹配和反模式匹配
- python - Flask Route 将 Args 传递给 Celery 任务
- wso2 - WSO2 Enterprise Integrator 数据库迁移
- angular - 我无法让路线在 Angular 中工作,请指教
- virtual-machine - 我们可以使用 libvert 单步 QEMU