4つのスペースを2つのスペースに変換するにはsed
?可能ですか?
これを見つけましたが、タブを空白に変換します。
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
答え1
公開したスクリプトは、スペースの前にタブのみがある場合、4 * nスペースをnタブに変換します。
インデントのために4つのスペースを2つのスペースに置き換えたい場合は、sedを使用しても構いませんが、Perlを使用することをお勧めします。
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
sedから:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
使いたいかもしれませんindent
代わりに。
答え2
直接的なアプローチは機能しません。
sed -r 's/ {4}/ /g'
そうでない場合は、失敗した部分にいくつかの入力を投稿してください。
答え3
先行スペースのみが変換される場合:
sed 'h;s/[^ ].*//;s/ / /g;G;s/\n *//'
追加コメント:
sed '
h; # save a copy of the pattern space (filled with the current line)
# onto the hold space
s/[^ ].*//; # remove everything starting with the first non-space
# from the pattern space. That leaves the leading space
# characters
s/ / /g; # substitute every sequence of 4 spaces with 2.
G; # append a newline and the hold space (the saved original line) to
# the pattern space.
s/\n *//; # remove that newline and the indentation of the original
# line that follows it'
'ts'
また、vimの設定と:retab
コマンドを見てください。
答え4
sed 's/ \{2,4\}\( \{0,1\}[^ ].*\)*/ \1/g' <input
これは先行空白シーケンスのみを圧縮する必要があります。