Відповіді:
Виконайте оцінку короткого замикання після grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qне видає виводу на STDOUT, просто виходить зі статусом виходу, 0якщо шаблон знайдено у файлі
Якщо шаблон знайдено ( &&), створіть файл /newfileза допомогою : >/newfile.
Ви також можете скористатися звичайним touch /newfileпідходом, або ж bash, порожнім перенаправленням - >/newfileтеж було б.
Зауважимо лише, що якщо файл вже існує, то touchзмінює лише відповідні часові позначки без обрізання файлу. І порожнє перенаправлення >/newfileпідтримується не в усіх оболонках під час руху (наприклад, в zsh), куди потрібно вручну відправити EOF.
:?
:скорочено true, це команда без операції, яка завжди завершується зі статусом виходу 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опція пригнічує весь вихід і повертає відповідність / невідповідність черезgrepвихідний код, який легко перевірити.