在许多文件中将制表符转换为空格

per*_*son 11 linux text-editing

我有很多带有标签的文件,我想将它们全部转换为空格。我知道这个expand命令,但不幸的是我必须输入使用它的每个文件。在 Linux 上有没有更简单的方法来做到这一点?

Nic*_*oul 12

请尝试以下操作:

find ./ -type f -exec sed -i 's/\t/ /g' {} \;
Run Code Online (Sandbox Code Playgroud)

如果您想要四个空格,请尝试:

find ./ -type f -exec sed -i 's/\t/    /g' {} \;
Run Code Online (Sandbox Code Playgroud)

  • 任何发现此问题的 Mac 用户请注意:OS X 版本的 `sed` 不理解 `\t` 选项卡转义序列。您可以将其替换为文字制表符,您可以通过`[Ctrl]+V, [Tab]` 在 shell 中输入该字符。 (6认同)

gar*_*ohn 6

有很多方法可以做到这一点。如果您不小心,或者您似乎是 Linux 新手,那么在执行此操作时,还有很多方法可以让自己受到伤害。假设您可以创建要转换的文件列表,通过使用类似的东西find或手动使用编辑器,只需将该列表传递到以下内容中即可。

while read file
do
   expand "$file" > /tmp/expandtmp
   mv /tmp/expandtmp "$file"
done
Run Code Online (Sandbox Code Playgroud)

你可以用它来打自己的脚的一种方法是打错字,这样你就可以将一个空文件转换为你指定的所有文件名,从而删除所有文件的内容。因此,请小心并在已备份的一小组文件上测试您首先执行的操作。

  • 使 `mv` 以 `expand` 成功为条件:`expand ... && mv ...` (3认同)