我希望删除/替换字符串内的“重复字符”,例如>
输入,
staaacksoveerfloow
期望的输出,
stacksoverflow
在这种情况下a
重复 3 次,e
is 2 & o
is 2。我们不是完全删除它们,而是删除重复/重复的条目。
但是,如果该字符前后没有重复,我们就不会进行重复数据删除。
答案1
$ tr -s '[:lower:]' <<<"staaacksoveerfloow"
stacksoverflow
tr
此处使用该实用程序及其-s
选项来删除给定字符串中任何小写字符的连续重复项。
[:lower:]
您可以使用a-z
或 与您想要影响的字符匹配的任何范围或字符类来代替。
答案2
答案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
再次,替换.
为[[:alpha:]]
/ [[:lower:]]
(POSIX 字符类),或 PCRE 属性(例如\p{Latin}
限制为拉丁脚本中的字母(例如英语中使用的字母)),或\w
... 请参阅man pcrepattern
了解详细信息。