
如何用製表符替換每行開頭的所有空格?
我更願意使用 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.