搜索sed搜索字符串的字典

时间:2018-06-12 17:11:18

标签: awk sed grep sh

为了好玩,我正在挖掘字典,以获取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代码在每一行中运行三次,这看起来过于漫长而且很笨拙。如何简化代码,同时仍然输出相同的单词列表?

grepawk答案也可以。

3 个答案:

答案 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宁静的蛇形的可服务的餐巾长椅遣散费严重排污六重奏最愚蠢的陈述最隐秘的最矮胖的最直的最紧身的紧身衣紧身衣


Regex: Match everything except backreference 启发的代码