2012-06-26 14 views
14

0 के अंत में पिछली जगहों वाली फ़ाइलों को ढूंढें I प्रत्येक पंक्ति के अंत में पिछली जगहों वाली फ़ाइलों को ढूंढने के लिए एक बैश कमांड की तलाश में हूं। मुझे रिक्त स्थान हटाने में दिलचस्पी नहीं है, लेकिन केवल फाइलों को ढूंढने में।बैश:

+2

नोट: प्रश्न के शब्द (इस लेखन के रूप में) स्पष्ट रूप से फ़ाइलें खोजने के लिए कहता है जबकि _each और प्रत्येक line_ पर पिछली जगहों के साथ, इस आवश्यकता की असामान्यता के परिणामस्वरूप कुछ जवाब सामने आए हैं - विशेष रूप से सबसे अधिक वोट वाले लोगों के साथ- पीछे की जगहों के साथ _one या more_ लाइनों वाली फ़ाइलों को ढूंढना। – mklement0

+0

sed -n '/ \ + $/p' फ़ाइल नाम – Luv33preet

उत्तर

1

एक या अधिक अनुगामी रिक्ति के साथ फ़ाइलें खोजें:

find . -name "*" | xargs egrep ".* +$" 
+0

मेरा मानना ​​है कि मूल प्रश्न उन फ़ाइलों को ढूंढना था जिनके पास सभी पंक्तियों पर पीछे की जगह है। हालांकि, मूल रूप से केवल खराब शब्द हो सकता है। – Nit

+0

@ नोट यह शरीर में स्पष्ट रूप से कहता है, उसे याद किया होगा, लेकिन प्रश्न हेडर संदिग्ध हो सकता है। – matcheek

+0

आपके समाधान पर विस्तार, यद्यपि, 'egrep-m1 -v -l "। * + $" 'उन सभी फ़ाइलों को ढूंढना चाहिए जो ** ** नहीं है ** ** प्रत्येक पंक्ति पर पिछली जगहों पर नहीं है, अगर मुझे गलत नहीं लगता है? – Nit

25

रिक्त स्थान अनुगामी है कि फाइलों का पता लगाएं।

find . -type f -exec egrep -l " +$" {} \; 
+0

जबकि आप कर सकते हैं केवल 'grep' के साथ करें, जैसा कि अन्य उत्तरों ने दिखाया है,' ढूंढ 'का उपयोग करना अभी भी एक अच्छा विचार हो सकता है, अगर आप जांच करने के लिए कौन सी फाइलों पर अधिक नियंत्रण चाहते हैं।, तो आप 'find' कमांड को' + '' बजाय की \; '' -exec' प्राथमिक समाप्त करने के लिए - 'यह लागू करेगा egrep' (आमतौर पर) केवल _once_, _all_ फ़ाइल नामों के साथ है कि इस सवाल का जवाब tra साथ _at कम से कम 1_ लाइन के साथ फ़ाइलें पाता – mklement0

+0

नोट। iling रिक्त स्थान। यह निश्चित रूप से उपयोगी हो सकता है और शायद अधिक आम उपयोग केस है, लेकिन ओपी ने पूछा नहीं है (कम से कम उनके शब्द ", _each_ लाइन के अंत में") द्वारा निहित है। – mklement0

8

लक्ष्य जो एक या अधिक पंक्तियों में व्हाइटस्पेस अनुगामी गई फ़ाइलों को सूचीबद्ध करने के लिए है, तो:

grep -r '[[:blank:]]$' . 

लाइनों मुद्रित नहीं करने के लिए, और प्रिंट सिर्फ फ़ाइल नाम ही, यह भी -l विकल्प निर्दिष्ट । llist शब्द के रूप में 1 पर नहीं है।

+1

सवाल कहता है "** ** ** प्रत्येक ** लाइन के अंत में" – Sorin

+1

@ सोरीन मुझे लगता है कि ओपी का काफी इरादा नहीं था, लेकिन यह स्वीकार करेगा कि सवाल वास्तव में कहता है कि, सचमुच लिया गया .. – twalberg

+0

@twalberg, यह एक मामूली सवाल नहीं बनाता है, जो तीसरे लगभग समान उत्तर – Sorin

1

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

grep -L '[^ ]$' * 

निर्देशिकाओं की पुनरावृत्ति करने के लिए, -r जोड़ें। अन्य व्हाइटस्पेस वर्णों के साथ-साथ, रेगेक्स के लिए एक वर्ण वर्ग $'[^ \t]$' या POSIX '[^[:blank:]]$' का उपयोग करें।

+0

अच्छी तरह से किया गया। यह वास्तव में केवल उन फ़ाइलों को लौटाता है जिनकी लाइनों में पिछली जगहें हैं - एक अपवाद के साथ: _empty_ (शून्य-बाइट) फ़ाइलें भी मेल खाती हैं। साथ ही, '*' ('-r' के बिना) का उपयोग उपनिर्देशिकाओं के लिए चेतावनियों के परिणामस्वरूप होगा, यदि कोई हो। '-L' POSIX-compliant नहीं है, लेकिन व्यापक रूप से समर्थित है, यह देखते हुए कि जीएनयू grep और बीएसडी दोनों इसे लागू करते हैं। – mklement0

+1

@ mklement0 शून्य आकार की फ़ाइलों के बारे में अच्छी पकड़। निर्देशिकाओं के बारे में चेतावनियों को दबाने के लिए आप '-s' का उपयोग कर सकते हैं, या' -r .' का उपयोग कर सकते हैं यदि आप एक संपूर्ण निर्देशिका पेड़ को पार करना चाहते हैं (ओपी कार्य के बारे में अनिश्चित था)। – tripleee

0

सवाल सचमुच है हर एक पंक्ति के अंत में एक खाली है फ़ाइलों को खोजने के लिए है, तो यह काम करना चाहिए:

grep -rL '[^[:blank:]]$' . 

-Lgrep बताता है हर फ़ाइल है कि पैटर्न से मेल नहीं खाता रिपोर्ट करने के लिए , और पैटर्न उन लाइनों की तलाश में है जिनके पास नई लाइन से पहले रिक्त स्थान नहीं है।

0

ack का उपयोग करना (या ag):

ack -l ' \n' 

नोट: जैसा अन्य उत्तर में से कुछ, यह फ़ाइलों को पीछे वाले स्पेस के साथ एक या अधिक पंक्तियाँ हो सूची जाएगा।

1

लक्ष्य वर्तमान पथमें खाली स्थान के पूर्ण विराम वाले सूची फ़ाइलें रहा है:

grep -rli '[[:blank:]]$' .