使用Expand命令在Linux终端中将制表符转换为空格
在本教程中,将介绍如何在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命令将输出写入原始文件。