Saya memiliki logfile dan saya ingin mencari string dan hanya jika string tersebut ditemukan file baru yang akan dibuat. Bagaimana saya bisa mencapai ini, meskipun sepertinya cocok dalam kasus ini.
command-line
Jacknife
sumber
sumber
grep
untuk mencari. The-q
pilihan akan menekan semua output, dan kembali pertandingan / nonmatch melaluigrep
's kode keluar, yang mudah diuji.Jawaban:
Tack evaluasi hubung singkat setelah
grep
:grep -q
tidak menghasilkan output pada STDOUT, hanya keluar dengan status keluar0
jika pola ditemukan pada fileJika polanya ditemukan (
&&
), buat file/newfile
dengan: >/newfile
.Anda juga bisa menggunakan
touch /newfile
pendekatan yang biasa , ataubash
melanjutkan, pengalihan kosong ->/newfile
juga bisa.Sekadar diketahui, jika file sudah ada maka
touch
hanya akan mengubah stempel waktu yang relevan tanpa memotong file. Dan pengalihan kosong>/newfile
tidak didukung pada semua shell on-the-go (misalnya dizsh
), di mana Anda harus mengirim EOF secara manual.sumber
:
dilakukan?:
adalah singkatan untuktrue
, itu adalah perintah no-op yang selalu keluar dengan status keluar 0.Hanya untuk bersenang-senang:
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.sumber
Anda dapat menggunakan awk dengan
system()
perintahnya. Jika/pattern/
ditemukan, kode kunci{}
akan dieksekusi, dalam hal ini kita panggiltouch /tmp/my_file.txt
melaluisystem()
perintah.Contoh di bawah ini menunjukkan membuat file sementara jika ada pengguna saya
/etc/passwd
.Atau, kita dapat menggunakan pengalihan ke file:
sumber
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:
sumber