將每行開頭的所有空格替換為製表符

將每行開頭的所有空格替換為製表符

如何用製表符替換每行開頭的所有空格?

我更願意使用 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.

相關內容