regex - 如何从 Bash 中的字符串中删除重复字符?

标签 regex linux bash tr

我有一个字符串

cabbagee 

我想删除重复的字符。 如果我使用 tr -s 它将删除序列中的重复字符。但我想要的输出是

cabge

如果有人能帮助我,我将不胜感激。

提供的答案是正确的,但我无法使用 awk,所以我使用了:

#!/usr/bin/bash
key=$1
len=${#key}
mkey=""
for (( c=0; c<len; c++ ))
do
    tmp=${key:$c:1}
    echo $mkey | grep $tmp >/dev/null 2>&1   
    if [ "$?" -eq "0" ]; then
        echo "Found $tmp in $mkey"
    else
        mkey+=$tmp
    fi
done
echo $mkey

最佳答案

你会使用 awk 吗?

awk -v FS="" '{
    for(i=1;i<=NF;i++)str=(++a[$i]==1?str $i:str)
}
END {print str}' <<< "cabbagee"
cabge

其他几种方式:

gnu awk:

awk -v RS='[a-z]' '{str=(++a[RT]==1?str RT: str)}END{print str}' <<< "cabbagee"
cabge

awk -v RS='[a-z]' -v ORS= '++a[RT]==1{print RT}END{print "\n"}' <<< "cabbagee"
cabge

gnu sedawk:

sed 's/./&\n/g' <<< "cabbagee" | awk '!a[$1]++' | sed ':a;N;s/\n//;ba'
cabge

关于regex - 如何从 Bash 中的字符串中删除重复字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23402740/

相关文章:

r - 获取第二个大写字母之前的子字符串

python - 在 Python 中使用正则表达式提取子字符串

java - 在文件的每一行中查找有效模式

linux - 使用 sed 或 awk 从文件中删除函数

python - 尽管安装了 Anaconda,Mac 仍使用默认 Python

bash - awk 以时间格式打印出最小和最大数字

javascript - 正则表达式 - 从字符串中获取 x 个字符,但 html 标签不计入计数

linux - 我怎样才能自动 http POST 连续中断许多文件?

linux - 在 Linux 中使用符号链接(symbolic link)将文件从一个位置 move 到另一个位置

Linux : check if something is a file [ -f not working ]