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

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

我有很多文件到处都是制表符,我想把它们都转换成空格。我知道这个expand命令,但不幸的是我必须用它输入每个文件。在 Linux 上有没有更简单的方法可以做到这一点?

答案1

请尝试以下操作:

find ./ -type f -exec sed -i 's/\t/ /g' {} \;

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

find ./ -type f -exec sed -i 's/\t/    /g' {} \;

答案2

有很多方法可以做到这一点。如果您不小心,或者您是 Linux 新手(您看起来是)。假设您可以创建要转换的文件列表(使用类似工具或手动使用编辑器),find只需将该列表输入到以下命令中即可。

while read file
do
   expand "$file" > /tmp/expandtmp
   mv /tmp/expandtmp "$file"
done

这样做可能会让你自食其果,因为如果你输入错误,你最终会将一个空文件复制到你指定的所有文件名中,从而删除所有文件的内容。所以要小心谨慎,并先在你备份的一小组文件上测试你所做的一切。

答案3

find . -type f -iname "*.js" -print0 | xargs -0 -I foo tab2space foo foo

-I foo为每个输入行创建一个模板变量 foo,因此您可以多次引用该输入。

-print0-0告诉两个命令使用 \0 作为行分隔符而不是 SPACE,因此该命令适用于带有空格的路径。

答案4

这个更好:

find . -name *.java ! -type d -exec bash -c 'expand -t 4 "$0" > /tmp/e && mv /tmp/e "$0"' {} \;

相关内容