2012-09-06 16 views
6

मेरे पास writelog नामक सर्वर पर एक लॉग फ़ाइल है जो लगभग 2GB है।लिनक्स टर्मिनल से लॉग फ़ाइल की सामग्री को कैसे हटाएं?

मैं फ़ाइल से पहले 100,000 लाइनों को हटाना चाहता हूं। मैं फ़ाइल खोल सकता हूं और उन पंक्तियों को हटा सकता हूं लेकिन फ़ाइल आकार के कारण यह मुझे हमेशा डाउनलोड करने के लिए ले जाता है।

तो, क्या यह लिनक्स टर्मिनल से ऐसा करना संभव है? यदि हां कैसे?

+1

आप देख सकते हैं http://stackoverflow.com/questions/2112469/delete-specific-line-numbers-from-a-text-file-using-sed –

उत्तर

3

आप एक लिनक्स सर्वर चला रहे हैं, तो आप ssh उपयोग कर सकते हैं:

ssh [email protected] sed -i '1,100000d' /path/to/logfile 
7

यह बेहतर हो सकता है पिछले 1000 लाइनों रखने के लिए:

mv writelog writelog.bak 
tail -1000 writelog.bak > writelog 

और तुम logrotate सक्षम होना चाहिए (manual) फ़ाइल के लिए। सिस्टम तब सुनिश्चित करेगा कि फ़ाइल अनुपात से बाहर नहीं बढ़ती है।

13

आप पूरी फ़ाइल बाहर साफ़ करना चाहते हैं एक त्वरित तरीका

cat /dev/null > writelog

भी this thread on unix.com देखें है।

+1

आपको "फ़ाइल मौजूद है" त्रुटि मिलेगी – Bala

+1

@ बाला आपकी शैल सेटिंग्स पर निर्भर करता है ... ऐसा करने का एक बेहतर तरीका यह है: ':> | '-C'/'noclobber' विकल्प को ओवरराइड करने के लिए लेखक' ... सी खोल में, यह है:':>! readelog' ... '' 'अंतर्निहित" शून्य कमांड "है, जो कुछ भी नहीं करता है, कुछ भी आउटपुट नहीं करता है, और हमेशा 0 से बाहर निकलता है। – Carpetsmoker