如何(最佳地)使用bash/sed/shuf从文件中挑选一个标准化的随机单词



我希望删除任何非字母(英文(字符,并使/usr/share/dict/words的输出小写。到目前为止,我拥有的是:

sed "$(shuf -i "1-$(cat /usr/share/dict/words | wc -l)" -n 1)q;d" /usr/share/dict/words | tr '[:upper:]' '[:lower:]' | sed 's/[^-a-z]//g'

这很好,但是否可以在一个sed命令中完成所有操作?


编辑:美式单词文件如下所示:

A
A's
AMD
AMD's
AOL
AOL's
AWS
AWS's
Aachen
Aachen's

我想让小写删除任何非字母字符(如我最初的问题中所述(。我的解决方案运行良好,但我希望减少命令的数量(可能只是sed?(。上述输出为:

a
as
amd
amds
aol
aols
aws
awss
aachen
aachens

您不需要sedwc——shuf可以打乱文件的行数
tr可以删除非字母,因此再次不需要sed

shuf -n1 /usr/share/dict/words | tr -dc '[:alpha:]' | tr '[:upper:]' '[:lower:]'

这个单独的awk命令应该完成以下工作:

awk '{gsub(/[^[:alpha:]]+/, ""); print tolower($0)}' file
a
as
amd
amds
aol
aols
aws
awss
aachen
aachens

这可能适用于您(GNU sed和shuf(:

shuf -n1 /usr/share/dict/words | sed 's/[^[:alpha:]-]//g;s/.*/L&/'

选择一个随机行,删除所有非字母(连字符除外(字符,并将结果小写。

最新更新