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

Iva*_*van 10 command-line text-processing

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

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

Sar*_*use 10

这应该这样做:

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +
Run Code Online (Sandbox Code Playgroud)

注意:这没有经过测试。


jan*_*sen 9

递归地,使用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' {} +

我会用sedor perl(见 Sardathrion 的回答)来做,因为它们支持内联编辑,但expand无论如何我想提到好的 ol' 。

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