用于将代码格式化为列的脚本

用于将代码格式化为列的脚本

通常,我想要根据类似的行结构来对齐代码,而不仅仅是左侧自动缩进。有没有一个脚本可以做这样的事情?这是我想做的一个例子。鉴于:

            self.colorOfBackground =? colorOfBackground
            self.colorOfLineForTime =? colorOfLineForTime
            self.marginOnBottom =? marginOnBottom
            self.marginOnTop =? marginOnTop
            ...

我想运行一个脚本并对齐选项卡上的每个“列”,以便它们对齐并且更易于直观解析:

            self.colorOfBackground     =?    colorOfBackground
            self.colorOfLineForTime    =?    colorOfLineForTime
            self.marginOnBottom        =?    marginOnBottom
            self.marginOnTop           =?    marginOnTop
            ...

我认为 Perl 或 Python 或 AWK 或其他一些脚本语言可以做到这一点,但可惜我对这些都不了解。到目前为止,我一直在使用 Vim 及其基于正则表达式的替换功能,但我仍然花费大部分时间手动间隔列。

答案1

这会给你预期的结果

文件.txt:

self.colorOfBackground =? colorOfBackground
self.colorOfLineForTime =? colorOfLineForTime
self.marginOnBottom =? marginOnBottom
self.marginOnTop =? marginOnTop

当使用以下命令时:

sed 's/^[[:blank:]]*//' File.txt | column -t -s "  "

此命令将删除前端空格:sed 's/^[[:blank:]]*//'参考此堆栈溢出问题,通过示例详细解释了该命令实际上执行堆栈溢出的操作:点击这里

句法 : column -t [-s separator] [filename] -> column -t -s " "

-t :以表格格式显示内容的参数

-s :根据特定分隔符分隔内容

命令输出:

self.colorOfBackground   =?  colorOfBackground
self.colorOfLineForTime  =?  colorOfLineForTime
self.marginOnBottom      =?  marginOnBottom
self.marginOnTop         =?  marginOnTop

确保在使用上述命令之前将文件中的整个数据对齐到左侧,以便对齐我使用的数据:sed 's/^[[:blank:]]*//'

答案2

即使您已经接受了答案,您也可以仅使用一个awksed命令来获得所需的结果,而无需将其通过管道传输到column命令中。

awk '{print $1"\t\t"$2"\t\t"$3}' column.txt

sed -e 's/^[[:blank:]]*//' -e 's|\s|\t\t|g' column.txt

sed命令首先删除每行开头的所有空格,然后将剩余的空格转换为两个制表符。它给出以下输出:

self.colorOfBackground          =?              colorOfBackground
self.colorOfLineForTime         =?              colorOfLineForTime
self.marginOnBottom             =?              marginOnBottom
self.marginOnTop                =?              marginOnTop

awk命令仅打印第一列,即以 开头的字符串self,然后打印两个选项卡,第二列,即=?,另外两个选项卡,最后打印第三列中的字符串。

self.colorOfBackground          =?      colorOfBackground
self.colorOfLineForTime         =?      colorOfLineForTime
self.marginOnBottom             =?      marginOnBottom
self.marginOnTop                =?      marginOnTop

要编辑文件本身而不是将其发送到标准输出,请使用以下任一命令:

sed -i -e 's/^[[:blank:]]*//' -e 's|\s|\t\t|g' column.txt 

awk -i inplace '{print $1"\t\t"$2"\t\t"$3}' column.txt

awk命令需要 4.2 或更高版本才能有-i inplace开关。

答案3

所有你需要的是:

$ column -t file
self.colorOfBackground   =?  colorOfBackground
self.colorOfLineForTime  =?  colorOfLineForTime
self.marginOnBottom      =?  marginOnBottom
self.marginOnTop         =?  marginOnTop

或者如果您愿意:

$ column -t -o'    ' file
self.colorOfBackground     =?    colorOfBackground
self.colorOfLineForTime    =?    colorOfLineForTime
self.marginOnBottom        =?    marginOnBottom
self.marginOnTop           =?    marginOnTop

$ column -t -o$'\t' file
self.colorOfBackground  =?      colorOfBackground
self.colorOfLineForTime =?      colorOfLineForTime
self.marginOnBottom     =?      marginOnBottom
self.marginOnTop        =?      marginOnTop

$ column -t -o$'\t\t' file
self.colorOfBackground          =?              colorOfBackground
self.colorOfLineForTime         =?              colorOfLineForTime
self.marginOnBottom             =?              marginOnBottom
self.marginOnTop                =?              marginOnTop

调整column论据以适应。

相关内容