我有很多文件到处都是制表符,我想把它们都转换成空格。我知道这个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"' {} \;