문자열에서 반복되는 문자 찾기 및 바꾸기

문자열에서 반복되는 문자 찾기 및 바꾸기

>와 같은 문자열 내에서 "중복 문자"를 제거/교체하고 싶습니다.

입력하다,

staaacksoveerfloow

원하는 출력,

stacksoverflow

이 경우 a3번을 반복합니다 . e는 2 & o는 2입니다. 완전히 제거하는 대신 중복/중복 항목을 제거합니다.

그러나 해당 문자가 전후에 반복되지 않으면 중복 제거되지 않습니다.

답변1

$ tr -s '[:lower:]' <<<"staaacksoveerfloow"
stacksoverflow

tr이 유틸리티와 해당 -s옵션은 주어진 문자열에서 연속된 중복된 소문자를 제거하는 데 사용됩니다.

[:lower:]a-z대신 영향을 미치려는 문자와 일치하는 범위나 문자 클래스를 사용할 수 있습니다 .

답변2

sed를 사용하여 이 작업을 수행할 수 있습니다.

echo staaacksoveerfloow | sed 's/\([a-zA-Z]\)\1\+/\1/g'

문제는 중복된 상태라기보다는 중복된 상태인 것 같아요. 더 참고하시면 됩니다여기

답변3

존재하다 ksh93:

$ var=staaacksoveerfloow
$ print -r -- "${var//@(?)+(\1)/\1}"
stacksoverflow

(중복 제거를 특정 문자 범주로 제한하려면 /... ?로 바꾸십시오.)[[:alpha:]][[:lower:]]

존재하다 zsh:

$ autoload -Uz regexp-replace
$ set -o rematchpcre
$ var=staaacksoveerfloow
$ regexp-replace var '(.)\1+' '$match[1]'
$ print -r -- $var
stacksoverflow

다시 한 번 / (POSIX 문자 클래스) 또는 PCRE 속성(예: 라틴어 스크립트 문자(예: 영어에서 사용되는 문자)로 제한) 또는 ... .로 바꾸 세요 . 자세한 내용은 참조하세요.[[:alpha:]][[:lower:]]\p{Latin}\wman pcrepattern

관련 정보