Ответы:
Придерживайтесь оценки короткого замыкания после grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qне производит вывод на STDOUT, просто завершает работу со статусом выхода, 0если шаблон найден в файле
Если шаблон найден ( &&), создайте файл с /newfileпомощью : >/newfile.
Вы также можете перейти на обычный touch /newfileподход или на bashпустое перенаправление - >/newfileтоже самое.
Просто чтобы заметить, что если файл уже существует, он touchбудет изменять только соответствующие временные метки без усечения файла. И пустое перенаправление >/newfileне поддерживается на всех оболочках на ходу (например, в zsh), где вы должны вручную отправить EOF.
:?
:- это сокращение true, это команда no-op, которая всегда завершается со статусом выхода 0.
Просто для удовольствия:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
где 'string'заменяется строкой (условие), 'logfile'заменяется путем к файлу журнала, 'newfile'заменяется фактическим путем к файлу для создания, все в одинарных кавычках, например, в примере.
Вы можете использовать awk со своей system()командой. Если /pattern/найден, кодовый блок {}будет выполнен, в этом случае мы вызываем touch /tmp/my_file.txtчерез system()команду.
В приведенном ниже примере показано создание временного файла, если в нем присутствует мой пользователь /etc/passwd.
$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd
$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月 25 07:58 /tmp/my_file.txt
В качестве альтернативы, мы могли бы использовать перенаправление в файл:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Вы не говорите, хотите ли вы новый пустой файл, или вам нужна более сложная обработка для создания файла.
Если первое, ответ @heemayl точный.
В противном случае используйте оператор if:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
grepдля поиска.-qОпция подавляет все выходные, и ответный матч / nonmatch черезgrep«s код выхода, который легко проверяемый.