遍历文件并将所有选项卡替换为两个空格

时间:2013-06-18 13:12:53

标签: shell tabs spaces

我想在项目目录中的所有文件中用2个空格替换所有选项卡。 这是我编写的代码,但它没有按预期工作。

标签与文件中的标签相同。

for i in *
do
  sed 's/tab/spacespace/g' "${i}" > temp.txt && mv temp.txt "${i}"
done

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您也可以使用expand

for f in *; do
    expand -t2 "$f" > tmp && mv tmp "$f"
done
出于以下原因,建议使用

expand

e.g。考虑tabsize = 8。 (选择较大的标签以便于解释。)

然后<LINE_START>abc<TAB>pqrs应表示如下:

T       T       T <~~~~~~ Tab markers on every 8th column, since tabsize=8.
abc     pqrs
-->     <-- This gap is 5 characters, not 8.

如果有人盲目地用N个空格替换所有标签,那么这将是错误的。但是,这将替换LEADING标签。

expand实用程序巧妙地处理上述情况。

答案 1 :(得分:0)

在我的代码中发现了一个愚蠢的错误。这是有效的

for i in * 
do
  sed 's/\t/  /g' "${i}" > temp.txt && mv temp.txt "${i}"
done