如何用制表符替换每行开头的所有空格?
我更愿意使用 sed 来实现此目的。
答案1
便携式。
TAB=$(printf '\t')
sed "s/^ */$TAB/" < file.in > file.out
某些 shell(至少是ksh93
、zsh
、bash
和mksh
FreeBSD 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.