问题:
我想确保某个字符串出现在文件中,并且另一个字符串不出现在文件中。如果满足两个条件,则命令应生成一些输出。
以下是我的开始:
我有一个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'
无论文件中有哪些其他行。我想要的是一个命令(或多个命令),如果文件中的另一行包含文本“此产品不再可用”,则不会产生任何输出。
答案 0 :(得分:2)
我想出了这个awk脚本,我用curl
管道网页。这有点难看,所以我希望我能从别人那里得到更好的答案。
所以我希望字符串“不再可用”不存在但是我确实希望“inStock”行存在。我不知道它们将以什么顺序出现在文件中。
这是脚本:
awk '/no longer available/ { a=1 } /inStock/ { b=1} END{ if(!a && b) { print("conditions matched")} }'
我想使用多行grep匹配也是一种选择。它可能会占用大量内存。由于我不知道字符串在网页中的显示顺序,因此也会很复杂。