正则表达式 – 使用grep等bash工具解决难题

前端之家收集整理的这篇文章主要介绍了正则表达式 – 使用grep等bash工具解决难题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要使用shell脚本解决难题.我试图将grep与rev组合并将输出保存到临时文本文件中,但仍然不知道如何完全解决它.

这就是要解决的难题:

j s e t f l
a l s f e l
g a a n p l
e p f d p k
r e g e l a
f n e t e n

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

我知道如何告诉grep在哪里找到匹配的模式作为使用$grep -Ff wordlist puzzle从文本文件提取的固定字符串
如何使用$rev puzzle搜索镜像词grep -Ff wordlist拼图,因此处理水平线,但我如何处理垂直字?

最佳答案
我正在覆盖水平和垂直匹配.主要思想是删除空格,然后将grep -f与给定的单词列表一起使用,存储在单词文件中.

使用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

垂直匹配

为此,我们首先必须转置文件内容.为此,我使用我用于another answer of mine内容

transpose () {
  awk '{for (i=1; i<=NF; i++) a[i,NR]=$i; max=(max

让我们看看:

$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也很有趣.

对角线匹配

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

e x x x x
x g x x x
x x g x x

可以变成

e x x x x
g x x x
g x x

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

为此,您可以使用Using variables in printf format中描述的printf:

$cat a
e x x x x
x g x x x
x x g x x
$awk -v c=20 '{printf "%*s\n",c,$0; c-=2}' a
        e x x x x
        x g x x x
    x x g x x

猜你在找的Linux相关文章