字符和数字的grep序列(仅限grep)

时间:2015-10-18 14:03:41

标签: regex grep

所以我有这个问题需要使用grep命令。 所以我得到了52张13级和4种颜色的牌。

等级包括A,2,3,4,5,6,7,8,9,T(十),J,Q和K(国王)。四种颜色:c,d,h,s。

现在我有了13张牌的所有可能组合的文件(cards.txt)。 示例:8cKc6s4dKd8sQc4c2s6h9dTc4h

现在问题是输出包含4张相同等级的牌的所有组合。

β= {h∈H| h包含4张相同排名的卡片}。 示例:

Kd9dJs5sKs7c5c6cKcJhKhTh7h∈β

AdTdTc2d2cTsKh6c3c6s6dKc4h∉β

(问题是我知道如何使用grep命令来处理字符序列,但只有当它们彼此相邻时才会使用。帮助plz)

2 个答案:

答案 0 :(得分:4)

我想你想要反向引用(见this link):

grep '\([A23456789TJQK]\).*\1.*\1.*\1' cards.txt

如果grep匹配A23456789TJQK中的字符,那么,由于括号\(...\),grep会将其称为\1(这是后引用)。

模式也可以写成如下:

grep '\([A23456789TJQK]\)\(.*\1\)\{3\}' cards.txt

答案 1 :(得分:0)

while read line
do
  if echo $line | sed 's/\(.\)./\1\n/g' | sort | uniq -c | grep -q '^ *4'
  then
    echo $line
  fi
done < cards.txt