You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现检测文件含指定字符串X且不含Y时输出内容?

解决方案:满足双条件的文本检测命令

我来给你几个实用的方案,完美适配你的cron任务需求——只有当网页包含inStock':'True且不包含This product is no longer available时才输出内容(这样cron才会触发邮件通知),否则无输出:

方法1:用grep + Shell条件判断(简单直观)

这个方法逻辑清晰,适合快速修改现有脚本:

curl https://your-target-url.com | if ! grep -q "This product is no longer available"; then grep "inStock':'True"; fi

逻辑说明:

  • grep -q:静默匹配,只返回状态码不输出内容,用来检查是否存在不可用文本
  • ! grep -q ...:表示如果没有找到不可用文本,才执行后面的grep "inStock':'True"
  • 只有当双条件都满足(无不可用文本 + 有库存标记)时,才会输出匹配到的inStock行,否则无输出

方法2:用awk一次性处理(高效省资源)

如果网页内容较大,awk只需要遍历一次内容,比两次grep更高效:

curl https://your-target-url.com | awk '{
    # 标记是否出现不可用文本
    if (/This product is no longer available/) { unavailable = 1 }
    # 标记是否找到库存标记
    if (/inStock'\''True/) { instock = 1 }
} END {
    # 最后判断双条件,满足则输出自定义内容(也可以输出匹配行)
    if (instock && !unavailable) { print "Product is in stock and available!" }
}'

优势:

  • 不管inStock和不可用文本是否在同一行,都能准确判断全局状态
  • 可以自定义输出内容,比如输出更明确的提示语,方便邮件里快速看结果

方法3:用perl处理全局匹配(灵活强大)

perl的全局匹配能力可以轻松处理整个网页内容:

curl https://your-target-url.com | perl -0777 -ne 'print "In stock and available!\n" if /inStock'\''True/ && !/This product is no longer available/'

说明:

  • -0777:让perl把整个输入内容当作一个单一字符串处理(避免行匹配的局限)
  • 直接用逻辑判断同时检查两个条件,满足则输出内容

测试验证

用你的example.txt测试时,执行如下命令应该无任何输出:

cat example.txt | # 替换成上面任意一种方法的命令部分

内容的提问来源于stack exchange,提问作者neuhaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:51:14