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

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

各行の先頭のすべてのスペースをタブ文字に置き換えるには?

私はこの目的のためにsedを使用することを好みます。

答え1

持ち歩ける。

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

一部のシェル(少なくともksh93、、zshおよびFreeBSD)はbashmkshこのような内容を拡張するsh特別な形式の引用符()もサポートしています。$'...'\t

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

シェルは引用符fishの外側の内容を拡張します。

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

sedGNU などの一部の実装では、sedTAB を基本的に意味として認識します。\tしたがって、これらについては次のように動作します。

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

移植可能でawk二重引用符で拡張されます。\tまた、拡張正規表現を使用するため、x+代わりに使用できますxx*

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

答え2

sed -rGNU / Linuxを使用している場合は、拡張正規表現を有効にする必要があります。

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

先行スペースのみが単一スペースに置き換えられますtab

関連情報