Как показать вывод, только если grep ничего не возвращает в цикле while - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть файл, который содержит список доменов. Я перебираю этот список, чтобы использовать curl и grep для конкретного элемента. Это делает, как задумано, однако мне нужно напротив этого; Это значит, что мне нужно видеть вывод, только если не не находит мою строку поиска.

Итак, если файл:

https://www.somewebsite1 dot com
https://www.somewebsite2 dot com
https://www.somewebsite3 dot com

Мой bash равен:

while read n;
do
echo $n;
curl -s $n | grep 'class="my_class"';
done < /my/file/location.txt

Вывод:

https://www.somewebsite1 dot com
                    <p class="my_class">"some_value"</p>
https://www.somewebsite2 dot com <--- NEED ONLY THESE LINES
https://www.somewebsite3 dot com
                    <p class="my_class">"some_value"</p>

I хочу только 2-й домен, который не имел никакого вывода для grep. Как мне этого добиться?

1 Ответ

1 голос
/ 01 мая 2020

Даже если возможно обеспечить однострочную печать, я хотел бы показать на более структурированном примере, как достичь цели.

#!/bin/bash

SEARCHPATTERN=$1

while read URL; # from list of URLs
do

  # echo "Going to gather CONTENT of ${URL}"
  CONTENT=$(curl --silent https://${URL} --write-out " %{http_code}")
  # echo "Gathered CONTENT is\n\n${CONTENT}"

  # Check if provided search pattern is part of the content
  if grep -q ${SEARCHPATTERN} <<< ${CONTENT}; then
    echo "Found ${SEARCHPATTERN} in ${URL}"
  else
    echo "Did NOT found ${SEARCHPATTERN} in ${URL}"
  fi

done < URLs.lst

Вы также можете воспользоваться Может ли grep возвращать true / false? и Как выполнить поиск grep для переменной? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...