길이가 다른 물결표 문자가 포함된 문자열을 공백 문자열로 바꾸고 싶습니다. 예를 들어, 문자열에 물결표 문자 5개가 포함되어 있으면 ~~~~~
공백 5개로 바꾸고 싶습니다.
내 현재 sed
명령:
sed -e '/\\begin{alltt}/,/\\end{alltt}/s/~\+/ /' test.tex
하나 이상의 물결표 문자를 확인할 수 있지만 삽입된 공백의 길이를 검색하는 방법을 모르겠습니다
답변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\}/'