我正在尝试编写一个bash命令来查找字符串是否包含一个接一个地重复相同的字母数字字符。
例如:
input: aaa, abc, aba, abc111;
output: aaa, abc111.
“aba”不被视为一个接一个地重复相同的字母数字字符。 “11”,“111”,“aa”,“aaaaaaaaa”等被认为是“重复”。不要担心输入。假设已被定义为其他地方的字符串。
说:INPUT =“aa”
答案 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