将每行开头的所有空格替换为制表符

将每行开头的所有空格替换为制表符

如何用制表符替换每行开头的所有空格?

我更愿意使用 sed 来实现此目的。

答案1

便携式。

TAB=$(printf '\t')
sed "s/^  */$TAB/" < file.in > file.out

某些 shell(至少是ksh93zshbashmkshFreeBSD sh)还支持特殊形式的引号 ( $'...'),其中诸如此类的内容\t会被展开。

sed $'s/^  */\t/' < file.in > file.out

shellfish扩展了引号之外的内容:

sed 's/^  */'\t/ < file.in > file.out

一些sed实现(例如 GNU) 本身sed也将 TAB 识别为含义。\t因此,对于这些,这也可行:

sed 's/^  */\t/' < file.in > file.out

可移植的是,确实在双引号内awk扩展。\t并且还使用扩展的正则表达式,因此可以使用x+代替xx*

awk '{sub(/^ +/, "\t"); print}' < file.in > file.out

答案2

如果您使用的是 GNU/Linux,则需要sed -r启用扩展正则表达式:

 echo "        lots of spaces    " | sed -r 's:^\s+:\t:'

其中只有前导空格全部替换为单个tab.

相关内容