我希望删除任何非字母(英文(字符,并使/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
您不需要sed
和wc
——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&/'
选择一个随机行,删除所有非字母(连字符除外(字符,并将结果小写。