使用Expand命令在Linux终端中将制表符转换为空格

时间:2020-03-05 15:26:21  来源:igfitidea点击:

在本教程中,将介绍如何在Linux命令行中将选项卡转换为文本文件中的空格。

使用expand命令在Linux命令行中将制表符转换为空格

我正在使用这个示例文本文件,它是一个用于检查奇数和偶数的简单C++程序。

检查文本文件是否包含制表符tab

有几种方法可以做到这一点。
我找到的最简单的方法是使用cat命令。

我们可以将cat命令与-T方法一起使用,并将所有选项卡在屏幕上显示为^ I(stdout)。

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

将制表符转换为空格并将其保存到原始文件

在以上所有示例中,我们已将转换后的文件保存到新文件中。
但是,如果目的是通过将选项卡转换为现有程序文件的空间来清理代码,则希望将输出保存在原始文件本身中。

为此,我们可以使用海绵命令。

海绵“吸收”整个标准输入,然后再将其写入输出。
当我们尝试更改和保存同一文件时,这非常有用。

现在,海绵命令可能在系统上不可用。
我们必须安装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 "##代码##" | sponge "##代码##"' {} \;

上面的命令查找所有扩展名为cpp的文件,将这些文件传递给expand命令,然后expand命令借助sponge命令将输出写入原始文件。