
各行の先頭にあるスペースをすべてタブに置き換えるにはどうすればよいでしょうか?
これには sed を使用することをお勧めします。
答え1
ポータブル。
TAB=$(printf '\t')
sed "s/^ */$TAB/" < file.in > file.out
一部のシェル (少なくともksh93
、zsh
、bash
、mksh
FreeBSD )では、 などが展開される特殊な形式の引用符 ( ) もサポートされています。sh
$'...'
\t
sed $'s/^ */\t/' < file.in > file.out
シェルfish
は引用符の外側のものを展開します:
sed 's/^ */'\t/ < file.in > file.out
sed
GNU のような実装では、 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。