Yanıtlar:
Aşağıdaki durumlarda kısa devre değerlendirmesi yapınız grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qSTDOUT üzerinde çıktı üretmez 0, desen dosyada bulunursa çıkış durumundan çıkar
Desen bulunursa ( &&), /newfiletarafından bir dosya oluşturun : >/newfile.
Ayrıca her zamanki touch /newfileyaklaşımı tercih edebilir veya bashboş bir yönlendirme >/newfilede yapabilirsiniz.
Sadece, eğer dosya zaten varsa, o touchzaman dosyayı kesmeden sadece ilgili zaman damgalarını değiştirir. Ve boş yönlendirme >/newfilehareket zshhalindeyken EOF'u manuel olarak göndermeniz gereken hareket halindeki tüm mermilerde (örn . İçeride) desteklenmez.
:?
:kısaca true, her zaman çıkış durumu 0 ile çıkan bir op-olmayan komut.
Sadece eğlence için:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
burada 'string'dize (koşul) 'logfile'ile değiştirilir, günlük 'newfile'dosyasına giden yolla değiştirilir, örnekte olduğu gibi tek tırnak içinde oluşturulacak gerçek dosya yolu ile değiştirilir.
Awk system()komutuyla kullanabilirsiniz . Eğer /pattern/bulunursa, kod bloğu {}yürütülür, bu durumda komut touch /tmp/my_file.txtyoluyla çağırırız system().
Aşağıdaki örnekte, kullanıcım varsa geçici bir dosya oluşturmayı gösterir /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
Alternatif olarak, yeniden yönlendirmeyi şu dosyaya kullanabiliriz:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Yeni bir boş dosya isteyip istemediğinizi veya dosyayı oluşturmak için daha karmaşık işlemlere ihtiyacınız olup olmadığını söylemezsiniz.
Eğer eski ise, @heemayl tarafından verilen cevap açıktır.
Aksi takdirde, bir if ifadesi kullanın:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
grepAramak için kullanın . Bu-qseçenek tüm çıktıları bastıracak vegrepkolayca test edilebilen çıkış kodu ile eşleşir / eşleşmiyor .