首页 > 解决方案 > 如何使用 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 = "" }

标签: vimawksedterraform

解决方案


awkcolumn:_

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  =  ""  }

推荐阅读