1. 前言
本教程将从编程的角度向您介绍如何在Linux命令行中将制表符(Tab)转换为空格。
关于在编程中使用Tab和空格的争论从未停止过。
虽然您可能喜欢一直使用Tab,但您的编码指南可能建议使用空格。
但是,如果您已经在程序的各个地方使用了制表符,并且需要将这些制表符转换为空格,以便审阅人员允许您的代码,那么请往下看。
在本教程中,我将向您展示如何在Linux命令行中将Tab符号转换为空格符号。
2. 在Linux命令行中将制表符(Tab)转换为空格
我使用这个示例文本文件,这是一个简单的c++程序,用于检查奇数和偶数。这是文件的内容:
“`c++
#include
using namespace std;
int main()
{
int n;
cout << “Enter a number: “;
cin >> n;
if (n%2 == 0) {
cout<<n<< "is an even Number";
}
else
cout<<n<< "is an odd Number";
return 0;
}

检查文本文件是否有tab符
有几种方法可以做到这一点。我发现最简单的方法是使用`cat`命令。
您可以使用带有`-T`选项的cat命令,并将所有选项卡显示为`^I`(标准输出) 。
```bash
cat -T tab_file
</code></pre>
您可以看到文件中制表符(tab)的位置。
```c++
#include
using namespace std;
int main()
{
^Iint n;
^Icout << “Enter a number:^I“;
^Icin >> n;
^I
^Iif (n%2 == 0) {
^I^Icout<## 3. 使用`expand`命令将制表符(tab)转换为空格
如果您对一个文件使用`expand`命令,它会将所有`tab`转换成一个包含8个空格的块,并在屏幕上显示输出。
```bash
expand tab_file
但那不是很方便,你几乎看不到这里的变化。更好的方法是将输出结果保存到另一个文件中。
expand tab_file > space_file
现在,如果使用cat
命令查看文件,就不会再找到制表符tab。
4. 减少空格符的数量
正如我在前一节中提到的,默认情况下,一个制表符等于8个空格。如果你的代码有这么大的缩进,那就太奇怪了。
好在您可以使用-t
选项更改默认空间大小。
expand -t N tab_file
例如,如果你必须把每个tab符变成2个空格,你可以像这样使用expand
命令:
expand -t2 tab_file > space_file
5. 只将最前面的制表符转换为空格
通常在程序中,您只需要转换最前面的制表符,即行首的制表符。
expand
也提供了这个选项。如果您只想将最前面的制表符转换为空格,请使用-i
选项。
如果我们继续前面的例子,请执行以下命令:
expand -t2 -i tab_file > space_file
6. 将制表符转换为空格并将其保存到源文件中
在上面的所有示例中,您已经将转换后的文件保存到一个新文件中。但是,如果您的目标是通过将制表符转换为现有代码文件的空格来清理代码,那么您可能希望将输出保存在源文件本身中。
为此,可以使用sponge
命令。在将标准输入写入输出之前,用sponge(海绵)
“吸收”整个输入。当您试图更改和保存相同的文件时,这是非常有用的。
现在,sponge
命令可能在您的系统上不可用。您必须安装moreutils
包。
在基于Ubuntu/Debian的发行版上,你可以使用以下命令来安装moreutils
包:
sudo apt install moreutils
安装后,便可使用它了:
expand -t2 -i tab_file | sponge tab_file
7. 将一个目录中所有匹配的文件中的制表符转换为空格
到目前为止,您所学的都适用于单个文件。但是如果你有一个项目,它有几个程序文件,你想把所有的制表符tab都转换成空格,你就需要更好的技术。
到目前为止,我们所学到的知识可以与强大的find
和exec
命令相结合。
find . -name '*.cpp' -type f -exec bash -c 'expand -t 4 "0" | sponge "0"' {} \;
上面的命令查找所有以扩展名cpp结尾的文件,将这些文件传递给expand
命令,而expand
命令在sponge
命令的帮助下将输出写入源文件。
您可能认为此时使用sed
命令会更容易一些,但这完全取决于您的爱好和选择。
8. 总结
通过本文,你应该学习到如何通过命令行工具把制表符tab转换为空格了吧?还可以结合find
等命令实现批量自动转换。
评论前必须登录!
注册