各行の先頭のスペースをすべてタブに置き換えます

各行の先頭のスペースをすべてタブに置き換えます

各行の先頭にあるスペースをすべてタブに置き換えるにはどうすればよいでしょうか?

これには sed を使用することをお勧めします。

答え1

ポータブル。

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

一部のシェル (少なくともksh93zshbashmkshFreeBSD )では、 などが展開される特殊な形式の引用符 ( ) もサポートされています。sh$'...'\t

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

シェルfishは引用符の外側のものを展開します:

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

sedGNU のような実装では、 TAB をそれ自体で意味としてsed認識します\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:'

ここで、先頭のスペースはすべて 1 つの . に置き換えられますtab

関連情報