vimではこれを行うことができるようです。
:s/^\t\+/\=repeat(' ',len(submatch(0)))
これがsedにどのように変換されるかわかりません。私は以下を試しました:
sed -ri "s/^\t\+/\=repeat(' ',len(submatch(0)))/g" test.txt
このコマンドは効果がないようです。
ベストアンサー1
たとえば、次のようになりますexpand
。expand -t 4 file.txt
expand
ソースファイルは編集されませんが、新しいファイルにリダイレクトしてmv
ソースを上書きするか、インストールされてsponge
いる場合に使用できます。
expand -t 4 file.txt > file.new && mv file.new file.txt
or
expand -t 4 file.txt | sponge file.txt
参考までに、unexpand
逆に複数のスペースをタブに変換するをご覧ください。
expand
両方とも、unexpand
固定幅タブ文字(たとえば、-t 4
など-t 8
)の使用をサポートします。またはタブ位置のリスト(たとえば-t 4,12,32
)も、最初の先行スペース/タブのみを変換することを選択できます。詳しくはマニュアルページをご覧ください。
詳細については、以下をsponge
参照してくださいman sponge
。ファイルを独自に転送するためのスポンジの標準的な代替案はありますか?。つまり、一時ファイルを使用してリダイレクトとmvを実行します。ただし、標準出力を現在の標準入力として使用されているのと同じファイルにリダイレクトしないでください。シェルは読み取り前にそれを上書きします。
sponge
出身ですその他のユーティリティパック。
PS:また参照してくださいGNUインデントまたは他の同様のソースコード書式設定ツールの1つです。