1

I want to download the source of a web page and then check for the presence of one string, and the absence of another. I have working code below - is it possible to do this entire script as a one-line command?

PAGE_SOURCE=`curl https://example.com`

if ! echo "$PAGE_SOURCE" | grep -q "string that is bad"; then
    if echo "$PAGE_SOURCE" | grep -q "string that is good"; then
        exit 0
    fi
fi

exit 1
Pete
  • 113
  • 4

1 Answers1

1

You may use

if grep -Pq '^(?!.*string that is bad).*string that is good'; then
    exit 0
fi

The well-known PCRE pattern described in Regular expression for a string containing one word but not another thread should be put inside a single-quoted string, or you will need to escape ! char since it is used to expand history.

The short pattern description:

  • ^ - start of string
  • (?!.*string that is bad) - a negative lookahead that fails the match if there are any 0+ chars other than line break chars as many as possible and then string that is bad immediately to the right of the current location
  • .*string that is good - any 0+ chars other than line break chars as many as possible and then string that is good.
Wiktor Stribiżew
  • 607,720
  • 39
  • 448
  • 563