如何在 Linux 中使用 Expand 命令将制表符转换为空格
本教程从编程的角度教您如何将Linux命令行中的制表符转换为空格。
关于在编程中使用制表符和空格的争论是一场永无休止的争论。
虽然您可能更喜欢一直使用制表符,但您的编码指南很可能建议使用空格。
但是,如果您已经在程序中的各处使用了制表符,并且需要将这些制表符转换为空格,以便审阅者允许您的代码,那么您来对地方了。
在本教程中,我将向您展示如何在 Linux 命令行中将文本文件中的制表符转换为空格。
Linux命令行中使用expand命令将制表符转换为空格
我正在使用这个示例文本文件,它是一个简单的 C++ 程序,用于检查奇数和偶数。这是文件的内容:
如果您想在学习本教程的同时练习该命令,可以从此处下载此文件。
检查您的文本文件是否有选项卡
有几种方法可以做到这一点。我发现的最简单的方法是使用 cat 命令。
您可以使用带选项 -T 的 cat 命令,并将所有选项卡在屏幕(标准输出)上显示为 ^I。
cat -T tab_file
您可以看到文件中选项卡的位置。
#include
using namespace std;
int main()
{
^Iint n;
^Icout << “Enter a number:^I“;
^Icin >> n;
^I
^Iif (n%2 == 0) {
^I^Icout<<n<< “is an even Number”;
^I}
^Ielse
^I^Icout<<n<< “is an odd Number”;
^Ireturn 0;
}
使用 Expand 命令将制表符转换为空格
如果您对文件使用 Expand 命令,它会将所有制表符转换为 8 个空格的块,并将输出显示在屏幕上。
expand tab_file
但这不太方便,不是吗?您在这里几乎看不到变化。更好的主意是将输出保存到另一个文件。
expand tab_file > space_file
现在,如果您使用 cat 命令查看该文件,您将不再找到任何选项卡。
减少空格数量
正如我在上一节中提到的,默认情况下,一个制表符等于 8 个空格。如果你的代码有这么大的缩进,那看起来会非常奇怪。
好处是您可以使用 -t 选项更改默认空间大小。
expand -t N tab_file
例如,如果您必须将每个制表符更改为 2 个空格,则可以使用 Expand 命令,如下所示:
expand -t2 tab_file > space_file
仅将前导制表符转换为空格
通常在程序中,您只想转换前导制表符,即行开头的制表符。您不想触摸实际上是代码一部分的行之间的选项卡。
Expand 也提供了此选项。如果您只想将前导制表符转换为空格,请使用-i 选项。
如果我们继续前面的示例,命令将如下所示:
expand -t2 -i tab_file > space_file
将制表符转换为空格并保存到原始文件中
在上述所有示例中,您已将转换后的文件保存到新文件中。但是,如果您的目标是通过将制表符转换为现有程序文件的空格来清理代码,则您可能希望将输出保存在原始文件本身中。
为此,您可以使用海绵命令。 Sponge 在将其写入输出之前“吸收”整个标准输入。当您尝试更改并保存同一文件时,这非常有用。
现在,海绵命令可能在您的系统上不可用。您必须安装 moreutils 软件包。应该可以使用
在基于 Ubuntu/Debian 的发行版上,您可以使用以下命令安装 moreutils:
sudo apt install moreutils
安装后,您可以在以下功能中使用它:
expand -t2 -i tab_file | sponge tab_file
将目录中所有匹配文件中的制表符转换为空格
到目前为止,您学到的任何内容都适用于单个文件。但是,如果您的项目包含多个程序文件,并且您想要将所有文件中的制表符转换为空格,那么您必须在这里变得聪明一点。
到目前为止我们所学到的内容可以与出色的 find 和 exec 命令结合起来。
find . -name '*.cpp' -type f -exec bash -c 'expand -t 4 "$0" | sponge "$0"' {} \;
上面的命令找到所有以cpp结尾的文件,将这些文件传递给expand命令,expand命令借助sponge命令将输出写入原始文件。
您可能认为此时使用 sed 命令会更容易,但这完全是您的选择。