【问题标题】:Traverse files and replace all tabs to two spaces遍历文件并将所有制表符替换为两个空格
【发布时间】:2013-06-14 17:21:09
【问题描述】:

我想将项目目录中所有文件中的所有制表符替换为 2 个空格。 这是我编写的代码,但它没有按预期工作。

标签与文件中的一样。

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

有什么建议吗?

【问题讨论】:

    标签: shell tabs spaces


    【解决方案1】:

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

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

    【讨论】:

    • expand 是推荐选项(参见其他答案)。此外,即使在 sed 中,您也不需要使用重定向 + mv。 sed 已经有一个-i 选项。
    • @anishsane -i 非常有用。非常感谢。
    【解决方案2】:

    你也可以使用expand

    for f in *; do
        expand -t2 "$f" > tmp && mv tmp "$f"
    done
    

    expand 是推荐选项,原因如下:

    例如考虑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 实用程序巧妙地处理了上述情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2014-12-15
      • 2018-09-03
      • 2016-01-07
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多