बिना प्रमुख व्हाट्सएप के मैं grep कैसे करूं


17

मैं एक बड़े कोडबेस से गुजर रहा हूं, और प्रमुख व्हाट्सएप और टेबुलेशन काफी कष्टप्रद लगता है। क्या इससे छुटकारा पाने का कोई तरीका है?

grep -R "something" ./

जैसे, इसके बजाय:

foo/bar.cpp:                       qwertyuiosomethingoi
foo/bar/baz.h:                          43rfsgsomethingdrfg
bar/bar.cpp:            1234edwssomethingczd

मैं कुछ प्राप्त करना चाहता हूं:

foo/bar.cpp: qwertyuiosomethingoi
foo/bar/baz.h: 43rfsgdsomethingrfg
bar/bar.cpp: 1234edwssomethingczd

या और अच्छा:

foo/bar.cpp:   qwertyuisomethingooi
foo/bar/baz.h: 43rfsgdrsomethingfg
bar/bar.cpp:   1234edwssomethingczd

इससे छुटकारा कहां? आउटपुट में? खोज पैटर्न में?
इग्नासियो वाज़केज़-अब्राम्स

@ इग्नासियो, आउटपुट में। अद्यतित प्रश्न
एंड्रयू

जवाबों:


4

परीक्षण फ़ाइलें बनाएँ

echo -e "\t   foo-somethingfoo" >something.foo
echo "    bar-bar-somethingbar" >something.bar_bar
echo "baz-baz-baz-somethingbaz" >something.baz_baz_baz
echo "  spaces    something  s" >something.spaces

पूर्ण शानदार रंग का उत्पादन :)

grep --colour=always "something" something.* | 
 sed -re  's/^([^:]+):(\x1b\[m\x1b\[K)[[:space:]]*(.*)/\1\x01\2\3/' |
   column -s $'\x01' -t

आउटपुट (रंग पाने के लिए इसे चलाएं)।

something.bar_bar      bar-bar-somethingbar
something.baz_baz_baz  baz-baz-baz-somethingbaz
something.foo          foo-somethingfoo
something.spaces       spaces    something  s

में परीक्षण किया गया gnome-terminal, konsole, terminator,xterm


अच्छा कार्य! एक छोटी सी समस्या है, हालांकि, आप \tपात्रों से मेल खाना भूल जाते हैं
एंड्रयू

\t? ... यह \tएक सेपरेटर के लिए उपयोग नहीं कर रहा है, यह $ '\ x01' (हेक्स 01) का उपयोग कर रहा है ... या आप कुछ और मतलब है?
पीटर। 23

मेरा मतलब है कि अग्रणी व्हाट्सएप के \tसाथ-साथ प्रमुख व्हाट्सएप भी हो सकते हैं\s
एंड्रयू

... तय हो गया। परिवर्तित `` से [[:space:]]... यदि आप केवल TAB और अंतरिक्ष पर विचार करना चाहते हैं, और सभी[ \t]
व्हाट्सएप का

6

आप बस उनका उपयोग करके समाप्त कर सकते हैं sed

grep blah filename.foo | sed -e 's/^[ \t]*//'

यह आउटपुट से प्रमुख व्हाट्सएप को हटा देगा


1
इसका कोई प्रभाव नहीं होगा, क्योंकि आउटपुट में किसी भी लाइन के शुरू होने पर कोई स्थान नहीं है।
अभिषेक ए

6

मान लें कि आप reएक फ़ाइल में पैटर्न (एक मूल नियमित अभिव्यक्ति) की तलाश कर रहे हैं , और आप सभी मिलान लाइनों से प्रमुख व्हाट्सएप को पट्टी करना चाहेंगे:

sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c

(वास्तव में, यह सभी प्रमुख व्हाट्सएप को पहले स्ट्रिप्स करता है, और फिर पैटर्न की तलाश करता है, लेकिन परिणाम समान है)

इसके grepबजाय आउटपुट को पोस्ट-प्रोसेस करने के लिए (आपके संपादित प्रश्न के अनुसार):

grep re * | sed 's/:[[:blank:]]*/: /'

पैटर्न [[:blank:]]*शून्य या अधिक रिक्त स्थान या टैब से मेल खाता है।


धन्यवाद, आखिरी स्निपेट ठीक काम करता है। क्या आउटपुट रंग को संरक्षित करने का कोई तरीका है?
एंड्रयू

रंग? मुझे पुराने ढंग से बुलाओ, लेकिन मेरा टर्मिनल सख्त काला और नारंगी है ... (यह एक "मैं नहीं जानता") है।
Kusalananda

3
- grep कॉल पर --color = हमेशा (GNU grep मानकर)। सेड कॉल रंगों को नहीं हटाती है, यह खुद grep है जो रंग का उपयोग नहीं करता है जब आउटपुट टर्मिनल पर नहीं जाता है - (डिफ़ॉल्ट रूप से --color = auto के साथ)। "हमेशा" यह करने के लिए मजबूर करता है, ठीक है, हमेशा रंग का उपयोग करें।
जुरगेन ए। एरहार्ड

@ Jurgen, धन्यवाद, लेकिन --color=alwaysइस के साथ regexp काम नहीं करता है: /
एंड्रयू

1
ओह, तुम सही हो। ऐसा इसलिए है क्योंकि कोलन और व्हॉट्सएप के बीच कंट्रोल सीक्वेंस (रंग के लिए) होते हैं। ।। आप कॉल sed में भागने दृश्यों (अनुक्रम (xterm, स्क्रीन, आदि) "\ 033 [मीटर \ 033 [कश्मीर" मुझे लगता दलदल की मानक vt100 अनुकरण के लिए कम से कम, है डाल सकता है; डी
जुरगेन एक । एरहद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.