各行の先頭のすべてのスペースをタブ文字に置き換えるには?
私はこの目的のためにsedを使用することを好みます。
答え1
持ち歩ける。
TAB=$(printf '\t')
sed "s/^ */$TAB/" < file.in > file.out
一部のシェル(少なくともksh93
、、zsh
およびFreeBSD)はbash
、mksh
このような内容を拡張するsh
特別な形式の引用符()もサポートしています。$'...'
\t
sed $'s/^ */\t/' < file.in > file.out
シェルは引用符fish
の外側の内容を拡張します。
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
sed -r
GNU / Linuxを使用している場合は、拡張正規表現を有効にする必要があります。
echo " lots of spaces " | sed -r 's:^\s+:\t:'
先行スペースのみが単一スペースに置き換えられますtab。