使用bash查找相同字符(字母数字)的重复

时间:2013-09-09 12:50:38

标签: bash

我正在尝试编写一个bash命令来查找字符串是否包含一个接一个地重复相同的字母数字字符。

例如:

input: aaa, abc, aba, abc111;

output: aaa, abc111.

“aba”不被视为一个接一个地重复相同的字母数字字符。 “11”,“111”,“aa”,“aaaaaaaaa”等被认为是“重复”。不要担心输入。假设已被定义为其他地方的字符串。

说:INPUT =“aa”

3 个答案:

答案 0 :(得分:0)

使用tr可以提供帮助。 (使用-s选项挤压定义的集合中的重复。)

示例:

$ a="abcdef"
$ [ $(echo ${a} | tr -s '[:alnum:]') == "${a}" ] && echo "No repeating characters" || echo "Repeating characters present"
No repeating characters
$ a="abc1111"
$ [ $(echo ${a} | tr -s '[:alnum:]') == "${a}" ] && echo "No repeating characters" || echo "Repeating characters present"
Repeating characters present
$ a="abc123"
$ [ $(echo ${a} | tr -s '[:alnum:]') == "${a}" ] && echo "No repeating characters" || echo "Repeating characters present"
No repeating characters
$ a="aaa123"
$ [ $(echo ${a} | tr -s '[:alnum:]') == "${a}" ] && echo "No repeating characters" || echo "Repeating characters present"
Repeating characters present
$ a="abacdc"
$ [ $(echo ${a} | tr -s '[:alnum:]') == "${a}" ] && echo "No repeating characters" || echo "Repeating characters present"
No repeating characters

答案 1 :(得分:0)

实际上正则表达式与您的目标匹配:

'([0-9a-zA-Z])\1'

如果你想打印这些单词,试试这个:

grep -oE '\b\w*([0-9a-zA-Z])\1\w*\b'

用你的例子测试:

kent$  echo "aaa, abc, aba, abc111"|grep -oE '\b\w*([0-9a-zA-Z])\1\w*\b'
aaa
abc111

答案 2 :(得分:0)

如果您在数组中有一组单词,则此代码将起作用:

#!/bin/bash

WORDS=(aaa abc aba abc111)

for W in "${WORDS[@]}"; do
    P=''
    for (( I = 0; I < ${#W}; ++I )); do
        C=${W:I:1}
        [[ $C == "$P" ]] && {
            echo "$W"
            break
        }
        P=$C
    done
done

输出:

aaa
abc111