我想用空格字符串替换包含不同长度的波浪号字符的字符串。例如,如果一个字符串包含 5 个波浪号字符:~~~~~
,那么我想用 5 个空格替换它。
我当前的sed
命令:
sed -e '/\\begin{alltt}/,/\\end{alltt}/s/~\+/ /' test.tex
我可以检查一个或多个波浪号字符,但不知道如何检索插入空格的长度
答案1
sed '/\\begin{alltt}/,/\\end{alltt}/s/~/ /g'
~
将用空格替换所有s。如果您只想替换每行~
第一个 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\}/'