Как искать файлы, в которых есть два разных слова? имеет много хороших решений вашей основной проблемы. Чтобы выполнить дополнительное требование для отображения контекста, нам нужно взять только один из этих ответов (, например, ответ Стефана)и добавить к нему немного:
find. -type f -exec grep -q word1 {} ';' -exec grep -q word2 {} ';' \
-exec grep -A3 -B3 -E -H 'word1|word2' {} +
Часть find. -type f -exec grep -q word1 {} ';' -exec grep -q word2 {} ';'
это просто второй ответ Стефана (портативный, но простой )с опцией -l
на второйgrep
(для списка имен файлов )заменено на-q
(для поиска и тихого выхода со статусом ). Затем мы добавляем последний grep
для отображения результатов. -A3
и -B3
показывают три строки после и три строки перед каждым совпадением; отрегулируйте их на свой вкус. -E
необходим для получения расширенного регулярного выражения word1|word2
работать без \
; -H
заставляет grep
печатать имя файла, даже если имеется только один файл.
Вот один -вкладыш для bash или аналогичных оболочек:
HOST=google.com; while true; do if ping -c 2 $HOST >/dev/null; then :; else echo "$(date) cannot reach $HOST"; fi; sleep 10; done
Используя curl
или ping
, но я не уверен, почему вы хотите это сделать.
while curl -Lsf google.com >/dev/null || { printf 'Lost connection!' >&2; break; }; do :; done
while ping -c 1 google.com >/dev/null || { printf 'Lost connection!' >&2; break; }; do :; done