为了好玩,我正在挖掘字典,以获取sed
可用于修改字符串的单词。例如:
sed settee <<< better
sed statement <<< dated
输出:
啤酒
痴呆症患者
这些sed
s
字必须至少 5 个字母,并以s
开头,然后是另一个字母,可以显示 < em>仅 3 次,第一个和第二个实例之间至少有一个其他字母,第三个实例为最后一个字母。
我使用sed
生成单词列表,它似乎有效:
d=/usr/share/dict/american-english
sed -n '/^s\([a-z]\)\(.*\1\)\{2\}$/{
/^s\([a-z]\)\(.*\1\)\{3\}$/!{/^s\([a-z]\)\1/!p}}' $d |
xargs echo
输出:
Sanatoria sanitaria sarcomata savanna secede secrete秘密隔离选择性镶边句子感性septette序列小夜曲宁静蛇纹石服务餐巾长椅severance严重污水处理sextette stateliest声明最隐秘最直接紧身衣裤紧身衣裤最紧张的结构主义者
但是sed
代码在每一行中运行三次,这看起来过于漫长而且很笨拙。如何简化代码,同时仍然输出相同的单词列表?
grep
或awk
答案也可以。
答案 0 :(得分:1)
sed -nE '/^s(.)[^\1]+\1[^\1]*\1g?$/p'
似乎工作正常。它为我生成了518个单词。我虽然只有/usr/share/dict/words
字典文件。
sabadilla sabakha sabana sabbatia sabdariffa sacatra saccharilla saccharogalactorrhea saccharorrhea saccharosuria saccharuria sacralgia sacraria sacrcraria sacrocoxalgia sadhaka sadhana撒哈拉沙漠saintpaulia salaceta salada salagrama salamandra saltarella salutatoria
...
特技演员subbureau sucuriu sucuruju sulphurou surucucu 正长岩 - 斑状线性交感神经切断术联合切开术联合体切开术 同义词同义词同义词同义词同义词 syzygetically syzygy
一个有趣的发现是
$ sed snow-nodding <<< now-or-never
noddior-never
答案 1 :(得分:1)
awk
救援!
代码更清晰,awk
并且作为规范读取:基于第二个字符分割单词,char的三个实例将单词分成4个段;第二个应该至少有一个char,最后一个应该是空的。
$ awk '/^s/{n=split($1,a,substr($1,2,1));
if(n==4 && length(a[2])>0 && a[4]=="") print}' /usr/share/dict/american-english | xargs
sanatoria sanitaria sarcomata savanna secede分泌秘密 隔离选择性镶边句子感性多愁善感 septette序列小夜曲宁静的蛇纹石可用的餐巾 长椅severance严重污水处理sextette stateliest声明 最隐秘最直的紧身衣紧身衣战略家 路灯最严格的结构主义者
答案 2 :(得分:0)
一种快速的pcregrep
方法,(用户时间 .025秒):
d=/usr/share/dict/american-english
pcregrep '^s(.)((?!\1).)+\1((?!\1).)*\1$' $d | xargs echo
输出:
sanatoria sanitaria sarcomata savanna secede分泌隔离选择性边缘句子情感情感化的septette序列serenade宁静的蛇形的可服务的餐巾长椅遣散费严重排污六重奏最愚蠢的陈述最隐秘的最矮胖的最直的最紧身的紧身衣紧身衣