एक फ़ाइल खोजें और एक नई फ़ाइल बनाएँ, अगर कोई शर्त पूरी हो


10

मेरे पास एक लॉगफ़ाइल है और मैं इसे एक स्ट्रिंग के लिए खोजना चाहता हूं और केवल अगर उस स्ट्रिंग को बनाने के लिए एक नई फ़ाइल मिली है। मैं इसे कैसे हासिल कर सकता हूं, इस मामले में सेड डिनस्ट फिट हो रहा है।


3
grepखोज करने के लिए उपयोग करें। -qविकल्प सभी उत्पादन को दबाने, और मैच / nonmatch के माध्यम से वापस आ जाएगी grepके बाहर निकलने के कोड है, जो आसानी से परीक्षण योग्य है।
वाल्टिनेटर

2
यह बताने में मददगार हो सकता है कि हालत क्या है।
जेएच

जवाबों:


16

बाद में एक शॉर्ट सर्किट मूल्यांकन लें grep:

grep -q 'search_pattern' /file && : >/newfile
  • grep -qSTDOUT पर कोई आउटपुट नहीं देता है, 0अगर फ़ाइल में पैटर्न पाया जाता है , तो बस बाहर निकलने की स्थिति से बाहर निकलता है

  • यदि पैटर्न पाया जाता है ( &&), /newfileद्वारा एक फ़ाइल बनाएँ : >/newfile


आप सामान्य touch /newfileदृष्टिकोण के लिए भी जा सकते हैं , या bashएक खाली पुनर्निर्देशन पर - >/newfileभी करेंगे।

बस ध्यान दें, यदि फ़ाइल पहले से मौजूद है तो touchकेवल प्रासंगिक टाइमस्टैम्प को फ़ाइल को काटे बिना बदल देगा। और खाली >/newfileगोले को सभी गोले पर (जैसे zsh) में समर्थित नहीं है , जहां आपको मैन्युअल रूप से ईओएफ भेजना होगा।


क्या करता :है?
जॉर्ज उदेन

5
@ जॉर्ज इसके :लिए शॉर्टहैंड है true, यह एक नो-ऑप कमांड है जो हमेशा एग्जिट स्टेटस से बाहर निकलता है 0.
हेमायल

@heemayl यह इस दिन तक सबसे अच्छा काम किया
जैकनीफ

6

सिर्फ मनोरंजन के लिए:

python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"

जहां 'string'स्ट्रिंग (स्थिति) 'logfile'द्वारा प्रतिस्थापित किया जाता है, लॉगफाइल के लिए पथ 'newfile'द्वारा प्रतिस्थापित किया जाता है, फ़ाइल में वास्तविक पथ द्वारा प्रतिस्थापित किया जाता है, सभी एकल उद्धरणों में, उदाहरण में।


4

आप इसके system()कमांड के साथ awk का उपयोग कर सकते हैं । यदि /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 

0

आप यह नहीं कहते कि क्या आप एक नई खाली फ़ाइल चाहते हैं, या यदि आपको फ़ाइल बनाने के लिए अधिक जटिल प्रसंस्करण की आवश्यकता है।

यदि पूर्व, @heemayl द्वारा उत्तर हाजिर है।

अन्यथा, एक if-statement का उपयोग करें:

if grep -q 'search_pattern' /file
then
    # Create your file here
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.