使用诸如grep之类的bash工具解决一个难题

我需要使用shell脚本解决一个难题。 我试图将greprev结合起来,并将输出保存到临时文本文件中,但仍不知道如何完全解决。

这是解决的难题:

jsetfl alsfel gaanpl epfdpk regela fneten 

包含要使用的单词表的文件位于http://pastebin.com/DP4mFZAr

我知道如何告诉grep在哪里可以find匹配的模式,使用$ grep -Ff wordlist puzzle来从文本文件中提取固定的string,以及如何使用$ rev puzzle | grep -Ff wordlist puzzle来search镜像文字$ rev puzzle | grep -Ff wordlist puzzle $ rev puzzle | grep -Ff wordlist puzzle ,因此处理横线,但我怎么处理垂直的话呢?

我涵盖了水平和垂直的匹配。 主要思想是删除空格,然后使用grep -f与给定的单词列表,存储在words文件中。

grep -f ,结果显示在行内。 如果您只想查看匹配的测试,请使用grep -of

水平匹配

 $ cat puzzle | tr -d ' ' | grep -f words alsfel gaanpl regela fneten $ cat puzzle | tr -d ' ' | grep -of words als gaan regel eten 

垂直匹配

为此,我们首先必须转置文件的内容。 为此,我使用我用于我的另一个答案 :

 transpose () { awk '{for (i=1; i<=NF; i++) a[i,NR]=$i; max=(max<NF?NF:max)} END {for (i=1; i<=max; i++) {for (j=1; j<=NR; j++) printf "%s%s", a[i,j], (j<NR?OFS:ORS) } }' } 

让我们看看:

 $ cat puzzle | transpose | tr -d ' ' | grep -f words jagerf slapen esafge tfndet lllkan $ cat puzzle | transpose | tr -d ' ' | grep -of words jager slapen af ge de kan 

然后,您可以使用rev (如您在您的问题中所建议的)来获取镜像文字。 对于垂直镜像的单词, tac也很有趣。

对角线匹配

对于对角线匹配,我认为一个有趣的方法是将每一行移动一点点到左/右。 这条路,

 exxxx xgxxx xxgxx 

可以变成

 exxxx gxxx gxx 

你可以使用垂直/水平方法。

为此,您可以按照使用printf格式的变量中所述使用printf :

 $ cat a exxxx xgxxx xxgxx $ awk -vc=20 '{printf "%*s\n", c, $0; c-=2}' a exxxx xgxxx xxgxx