grep

2010-10-20 17 views
20

के साथ इन-प्लेस प्रोसेसिंग में मुझे एक स्क्रिप्ट मिली है जो टेक्स्ट फ़ाइल को संसाधित करने के लिए grep को कॉल करती है। वर्तमान में मैं ऐसा कुछ कर रहा हूं।grep

$ grep 'SomeRegEx' myfile.txt > myfile.txt.temp 
$ mv myfile.txt.temp myfile.txt 

मैं अगर वहाँ में जगह प्रसंस्करण, दुकान में के रूप में एक अस्थायी फ़ाइल बनाने और उसके बाद अस्थायी फ़ाइल जब साथ मूल को बदलने के लिए बिना एक ही मूल फाइल करने के लिए परिणाम करने के लिए कोई रास्ता नहीं है सोच रहा हूँ प्रसंस्करण किया जाता है।

बेशक मैं टिप्पणियों का स्वागत करता हूं कि यह क्यों किया जाना चाहिए या नहीं किया जाना चाहिए, लेकिन मुझे मुख्य रूप से दिलचस्पी है कि किया जा सकता है। इस उदाहरण में मैं grep का उपयोग कर रहा हूं, लेकिन मुझे सामान्य रूप से यूनिक्स टूल के बारे में रूचि है। धन्यवाद!

उत्तर

12

पर्ल -i स्विच है, तो करता है sed और Ruby

sed -i.bak -n '/SomeRegex/p' file 

ruby -i.bak -ne 'print if /SomeRegex/' file 

लेकिन ध्यान दें कि यह सब कुछ करता है जो पिछली छोर पर "अस्थायी" फाइलें बना रहा है जो आपको लगता है कि आप नहीं देखते हैं, बस इतना ही है।

अन्य तरीके के अलावा grep

awk

awk '/someRegex/' file > t && mv t file 

बैश

while read -r line;do case "$line" in *someregex*) echo "$line";;esac;done <file > t && mv t file 
+0

के लिए कैसे awk और बैश उदाहरण मूल ग्रेप में सुधार करते हैं, बजाय ; '? ये अभी भी स्पष्ट रूप से एक अस्थायी फ़ाइल बनाते हैं। –

2

नहीं, सामान्य रूप से यह इस तरह यूनिक्स में नहीं किया जा सकता है। आप केवल एक फ़ाइल (>> के साथ) को बना सकते हैं/छंटनी कर सकते हैं। एक बार छंटनी हो जाने पर, पुरानी सामग्री खो जाएगी।

3

सामान्यतः, यह नहीं किया जा सकता है।

perl -i -ne 'print if /SomeRegEx/' myfile.txt 

लेखन -i.bak कारण होगा मूल myfile.txt.bak में सहेजने की: लेकिन पर्ल -i स्विच है।

(बेशक आंतरिक रूप से, पर्ल सिर्फ मूल रूप से क्या आप पहले से ही कर रहे हैं करता है -। वहाँ कोई विशेष जादू शामिल है)

+2

समझ में आ गया, जबकि मैं इसे देख रहा था - '' && के अलावा अन्य '+1 अपनी गति –

-1

अधिक के लिए http://petdance.com/perl/command-line-options.pdf पर अपनी स्लाइडों में "पर्ल कमांड लाइन विकल्प के लिए फील्ड गाइड" पर एक नज़र डालें पर्ल के साथ आप क्या कर सकते हैं पर विचार।

0

sed के अधिकांश इंस्टॉलेशन इन-प्लेस संपादन कर सकते हैं, मैन पेज को चेक करें, शायद आप -i ध्वज चाहते हैं।

0

vim तरह का प्रयोग करने में जगह फाइल को संपादित करने के लिए, कोशिश:

$ ex -s +'%!grep foo' -cxa myfile.txt 

वैकल्पिक रूप से sed या gawk का उपयोग करें।

11

sponge (डेबियन/उबंटू में moreutils पैकेज में) ईओएफ तक इनपुट पढ़ता है और इसे फ़ाइल में लिखता है, ताकि आप फ़ाइल को grep कर सकें और इसे स्वयं लिख सकें।

इस तरह

:

grep 'pattern' file | sponge file