異なる長さのチルダ文字を含む文字列を空白文字列に置き換えたいと思います。たとえば、文字列に5つのチルダ文字が含まれている場合は、5つのスペースに~~~~~
置き換えたいと思います。
私の現在のsed
コマンド:
sed -e '/\\begin{alltt}/,/\\end{alltt}/s/~\+/ /' test.tex
1つ以上のチルダ文字を確認できますが、挿入されたスペースの長さを取得する方法がわかりません。
ベストアンサー1
sed '/\\begin{alltt}/,/\\end{alltt}/s/~/ /g'
~
すべてのsを空白に置き換えます。~
各行の順序で最初のsだけを置き換えるには、次のようにします。~
sed '
/\\begin{alltt}/,/\\end{alltt}/{
/~/ {
h; # save a copy
s/\(~\{1,\}\).*/\1/; # remove everything after the first sequence of ~s
s/~/ /g; # replace ~s with spaces
G; # append the saved copy
s/\n[^~]*~*//; # retain only what's past the first sequence of ~s
# from the copy
}
}'
注:\{1,\}
GNU拡張と同等の標準\+
。
以下を使用する方が簡単ですperl
。
perl -pe 's{~+}{$& =~ s/~/ /gr}e if /\\begin\{alltt\}/ .. /\\end\{alttt\}/'
または:
perl -pe 's{~+}{" " x length$&}e if /\\begin\{alltt\}/ .. /\\end\{alttt\}/'