如何用两个空格替换文件系统分支中每个文件中的所有选项卡?


10

我对Scala进行编码,习惯上是在每个级别使用双倍空格进行标识。但是使用不同的编辑器会使我的资源充满空格和制表符。

我想自动重构所有文件(* .scala文件,但没有必要指定它)(在给定目录和所有基础FS分支中(递归)),将所有选项卡替换为双空格。我相信使用经典的Unix / GNU工具有一种简单而美观的方法,但是我在这方面没有任何经验。您愿意帮我吗?

Answers:


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无论如何我都想提到很好。

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


第一个变体按预期工作。第二个(perl)变体将一个制表符仅替换为一个空格而不是两个空格。
伊万

是的,很抱歉:这是格式错误。源代码说两个空格,但是渲染的HTML仅显示一个空格。
janmoesen

10

应该这样做:

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

注意:这未经测试。


1
这还不是递归的。您可以使用find或支持**/*.scala递归的shell 。
janmoesen 2011年

编辑添加递归行为...
Sardathrion-反对SE滥用2011年

请不要提拔find | xargsfind -exec就像我在回答中提到的那样使用。更轻松,更安全。
janmoesen 2011年

试过这个,没有结果。该命令立即返回,文件内部没有任何变化。
伊凡

这未经测试,但其要旨将起作用。
Sardathrion-反对SE滥用2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.