检测文件是否包含字符串X但不包含不同行上的字符串Y.

时间:2018-01-29 14:53:09

标签: bash shell curl awk grep

问题:

我想确保某个字符串出现在文件中,并且另一个字符串出现在文件中。如果满足两个条件,则命令应生成一些输出。

以下是我的开始:

我有一个cronjob定期下载curl的网页。 我希望每当某个文本(“ inStock”:'True “)出现在该网页的一行上时,我会收到通知。这部分很简单,效果很好。这是我用过的cronjob:

curl --silent --cookie "myStore=true; storeSelected=131; ipp=25; SortBy=match; rearview=501552" http://www.microcenter.com/product/501552/AIY_VISION_KIT | grep "inStock':'True"

因为它作为cronjob运行,每当“grep”产生任何输出时(例如“'inStock':'True',”),我将收到一封电子邮件。

现在出现了另一个问题:如果文本(“此产品不再可用”)出现在网页的 上,我不想要毕竟会得到通知。

有什么好的解决方案吗?它不一定是grep,awk或perl也没关系。

以下是我们可以使用的示例文件example.txt,而不是取决于特定的网页和卷曲:

This product is no longer available
'inStock':'True',

所以如果我跑

cat example.txt | grep "inStock: 'true"

将输出

inStock: 'true'

无论文件中有哪些其他行。我想要的是一个命令(或多个命令),如果文件中的另一行包含文本“此产品不再可用”,则不会产生任何输出。

1 个答案:

答案 0 :(得分:2)

我想出了这个awk脚本,我用curl管道网页。这有点难看,所以我希望我能从别人那里得到更好的答案。

所以我希望字符串“不再可用”不存在但是我确实希望“inStock”行存在。我不知道它们将以什么顺序出现在文件中。

这是脚本:

awk '/no longer available/ { a=1 } /inStock/ { b=1} END{ if(!a && b) { print("conditions matched")} }'

我想使用多行grep匹配也是一种选择。它可能会占用大量内存。由于我不知道字符串在网页中的显示顺序,因此也会很复杂。