通常,我想要根据类似的行结构来对齐代码,而不仅仅是左侧自动缩进。有没有一个脚本可以做这样的事情?这是我想做的一个例子。鉴于:
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
即使您已经接受了答案,您也可以仅使用一个awk
或sed
命令来获得所需的结果,而无需将其通过管道传输到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
论据以适应。