我找到的解决方案涉及使用grepfirst 从输入集中提取所有仅包含字母的 n 字母单词 - 尽管有些字母可能出现不止一次,但有些可能不会出现;(我再次假设输入字母是唯一的)。然后它会执行一系列 1 字母greps以确保每个字母至少出现一次。因为单词的长度为 n,这确保了单词包含每个字母一次且仅一次。例如,如果输入字符集是,(a,b,c}那么解决方案是:
grep -E '^[abc]{3}$' /usr/share/dict/words | grep a | grep b | grep c
可以编写一个简单的 bash 脚本,它创建这个grep字符串并针对 word 文件执行它,使用 $1 作为输入字母集。它可能不是生成字符串的最有效方法,但由于我不熟悉,sed或者awk它似乎确实解决了我的问题。我创建的脚本是:
#!/bin/sh
slen=${#1}
g2="'^[$1]{$slen}\$'"
g3=""
ix1=0
while [ $ix1 -lt $slen ]
do
g3="$g3 | grep ${1:$ix1:1}"
ix1=$((ix1+1))
done
eval grep -E $g2 /usr/share/dict/words $g3