Jawaban:
Tack evaluasi hubung singkat setelah grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qtidak menghasilkan output pada STDOUT, hanya keluar dengan status keluar 0jika pola ditemukan pada file
Jika polanya ditemukan ( &&), buat file /newfiledengan : >/newfile.
Anda juga bisa menggunakan touch /newfilependekatan yang biasa , atau bashmelanjutkan, pengalihan kosong - >/newfilejuga bisa.
Sekadar diketahui, jika file sudah ada maka touchhanya akan mengubah stempel waktu yang relevan tanpa memotong file. Dan pengalihan kosong >/newfiletidak didukung pada semua shell on-the-go (misalnya di zsh), di mana Anda harus mengirim EOF secara manual.
:dilakukan?
:adalah singkatan untuk true, itu adalah perintah no-op yang selalu keluar dengan status keluar 0.
Hanya untuk bersenang-senang:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
di mana 'string'digantikan oleh string (kondisi), 'logfile'digantikan oleh path ke file log, 'newfile'digantikan oleh path sebenarnya ke file untuk membuat, semua dalam tanda kutip tunggal, seperti dalam contoh.
Anda dapat menggunakan awk dengan system()perintahnya. Jika /pattern/ditemukan, kode kunci {}akan dieksekusi, dalam hal ini kita panggil touch /tmp/my_file.txtmelalui system()perintah.
Contoh di bawah ini menunjukkan membuat file sementara jika ada pengguna saya /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
Atau, kita dapat menggunakan pengalihan ke file:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Anda tidak mengatakan apakah Anda menginginkan file kosong baru, atau jika Anda membutuhkan pemrosesan yang lebih kompleks untuk membuat file.
Jika yang pertama, balasan oleh @heemayl tepat.
Kalau tidak, gunakan pernyataan if:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
grepuntuk mencari. The-qpilihan akan menekan semua output, dan kembali pertandingan / nonmatch melaluigrep's kode keluar, yang mudah diuji.