
예를 들어, 괄호 사이의 공백만 제거하면 이 게시물의 제목은 다음과 같습니다.
How can I remove a character onlyfoundbetweenbrackets, and take the brackets along for the ride?
여기서는 대괄호를 제자리에 유지하는 예만 보았습니다.
편집하다:공백을 제거할 필요는 없습니다. 제거해야 합니다.N특징.
이것은 지금까지 내 코드입니다.Ns, 하지만 안타깝게도 이렇게 하면 불쾌한 중괄호가 남게 됩니다.
sed -i "" -e :1 -e 's/\({[^}]*\)[ñ]/\1/g;t1' file
_________________________________________________
ñañañañañañañaña{ñañañañañañañaña}batmañañañañañañañaña{ñañañañañañañaña}batmañ
getting:
ñañañañañañañaña{aaaaaaaa}batmañañañañañañañaña{ñañañañañañañaña}batmañ
but wishing for:
ñañañañañañañañaaaaaaaaabatmañañañañañañañaña{ñañañañañañañaña}batmañ
FreeBSD/MacOS에서는 gawk나 GNU sed를 사용할 수 없습니다.
답변1
의 경우 perl
문자가 ñ
UTF-8로 인코딩되어 해당 문자의 사전 조립 및 분해 버전을 처리한다고 가정합니다.
perl -C -pi -e '
BEGIN {
$c = qr{\N{LATIN SMALL LETTER N WITH TILDE}|n\N{COMBINING TILDE}}
}
s<\{([^}]*$c[^}]*)\}><$1 =~ s/$c//gr>ge' -- your-file
(중첩이 없다고 가정 {...}
).
답변2
모든 Unix 시스템의 모든 쉘에서 awk를 사용하십시오.
$ awk '{
while ( match($0,/\{[^}]+}/) ) {
tgt = substr($0,RSTART+1,RLENGTH-2)
gsub(/ñ/,"",tgt)
$0 = substr($0,1,RSTART-1) tgt substr($0,RSTART+RLENGTH)
}
print
}' file
ñañañañañañañañaaaaaaaaabatmañañañañañañañañaaaaaaaaabatmañ
위의 내용에서는 중첩된 괄호가 없다고 가정합니다.
답변3
gawk/mawk/mawk2/nawk에서 작동하는 것으로 확인되었으며 UTF8 또는 POSIX/C 로케일에서도 잘 작동합니다.
라이트:
gawk/mawk/nawk 'BEGIN {
__=index(FS="[{"(OFS="")"}]","{")
} __<=(NF=NF) { _=!__
do { gsub("\303\261","",$(_+=__)) } while(_<NF) }__'
확장하다:
ñañañañañañañañaaaaaaaaabatmañañañañañañañañaaaaaaaaabatmañ
# gawk profile, created Thu Mar 17 08:27:40 2022
# BEGIN rule(s)
BEGIN {
1 __ = index(FS = "[{" (OFS = "") "}]", "{")
}
# Rule(s)
1 __ <= (NF = NF) { # 1
1 _ = ! __
3 do {
3 gsub("\303\261", "", $(_ += __))
} while (_ < NF)
}
1 __ { # 1
1 print
}
- 작은 버그가 발견되어 수정되었습니다.
NF=NF