如何将文件系统分支中每个文件中的所有制表符替换为每个制表符 2 个空格?

如何将文件系统分支中每个文件中的所有制表符替换为每个制表符 2 个空格?

我编写 Scala 代码,它的约定是每个级别使用双空格进行标识。但使用不同的编辑器会使我的源代码充满空格和制表符。

我想自动重构所有文件(实际上是 *.scala 文件,但没有必要指定这一点)(在给定目录和所有底层 FS 分支(递归地)中),用双空格替换所有制表符。我相信有一种简单而美观的方法可以使用经典的 Unix/GNU 工具来做到这一点,但我在这方面缺乏任何经验。你愿意帮助我吗?

答案1

这应该可以做到:

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +

笔记:这没有经过测试。

答案2

递归地,使用expand(为此目的而制作的):find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

sed我会用or来完成它perl(参见 Sardathrion 的答案),因为它们支持内联编辑,但无论如何我想提一下好expand

编辑:那就是find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +

相关内容