फ़ाइल और पाइपिंग के लाभ grep करने के लिए


19

क्या किसी फाइल को कैट करने और सुविधा के अलावा उसे क्रेप करने के लिए कोई अतिरिक्त लाभ है? सुविधा यह है कि, जब मैं अपने इतिहास से नीचे दिए गए आदेशों को पुनः प्राप्त करता हूं, तो कर्सर पंक्ति के अंत में होता है, इसलिए एक ही फ़ाइल के विरुद्ध अलग पाठ के साथ कमांड को संशोधित करना आसान होता है।

तो निम्नलिखित सम्मेलन में और क्या फायदे हो सकते हैं:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main

के बजाय:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 

जवाबों:


21

बिल्ली से बचने के लिए बेहतर है; इसे इस तरह से लिखें यदि पंक्ति संपादन मायने रखता है:

$ < filename grep pattern

कारण यह है कि बिल्ली के माध्यम से सभी डेटा को धक्का देने से स्मृति और सीपीयू संसाधनों की लागत होती है। पुनर्निर्देशन के बजाय फ़ाइल नाम को एक तर्क के रूप में पारित करने का एक और लाभ यह है कि यह फ़ाइल को कमांड को mmap () करने का विकल्प देता है।


9

मैं विश्वास नहीं कर सकता कि किसी ने भी "बिल्ली के बेकार उपयोग" को संदर्भित नहीं किया है । http://www.smallo.ruhr.de/award.html अभी तक

एक संदिग्ध लाभ है। यदि आपके पास एक लंबी पाइपलाइन है, तो यह बिल्ली के साथ थोड़ा अधिक ऑर्थोगोनल दिखता है:

cat file | command1 | command 2 | command3

यह सभी कमांड्स को एक साथ जोड़ देता है।

बेशक दूसरों ने कहा है (और मैं करता हूं)

< file command1 | command2 | command3

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

आम तौर पर catकिसी फाइल को सीधे हिट करने से vs का उपयोग करने से कुछ भी नहीं बदलता है, लेकिन यह कुछ कमांड्स के लिए एक अंतर बनाता है जो इस बात का ध्यान रखते हैं कि क्या तर्क के रूप में कई फाइलें हैं, जैसे कि grep। इसका स्पष्ट उदाहरण:

cat file1 file2 | grep SOMETHING

से अलग आउटपुट होगा

grep SOMETHING file1 file2

जिसमें आउटपुट में मैचिंग फाइलनाम होंगे। कई बार मैं फ़ाइल नाम नहीं चाहता, और यह एक फायदा है cat


1
catसे पढ़ने के लिए बहुत स्पष्ट है <। या हो सकता है कि सिर्फ हमारे लिए फोगी जो सोचते हैं कि यूनिक्स और बैश वीएमएस और डीसीएल से बहुत कुछ सीख सकते हैं।
रॉनजॉन

8

कोई फायदा नहीं हुआ। अंत में आपका कर्सर होना भी बहुत मायने नहीं रखता अगर आप इसे इस तरह से संरचना करें:< inputfile grep -args foo


6

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

[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.021s
user    0m0.000s
sys     0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.002s
user    0m0.000s
sys     0m0.000s
[root@un1xf00 root]#

अपडेट: धन्यवाद, @Andy Lester, यह इंगित करने के लिए कि ये समय डिस्क डिस्क कैश को ध्यान में नहीं रखते हैं। मैंने कुछ नया सीखा! लेकिन एक सेकंड के एक अंश की बचत से वैसे भी बहुत फर्क नहीं पड़ता। मुझे लगता है कि grep में बिल्ली को पाइप करना चीजों को करने का तार्किक तरीका नहीं है। यह किसी और से आपकी समस्या के बारे में मदद करने के लिए कहने जैसा है, जब आप इसे स्वयं हल करने में पूरी तरह सक्षम होते हैं।


1
@ मिचेल: आप -10 आपत्तिजनक होने के लिए। आप अधिक सहायक हो सकते थे। बहुत बुरा आप इसे नहीं देखेंगे क्योंकि आपके पास यहां खाता नहीं है।
अगली सूचना तक रोक दिया गया।

4
माइकल कह रहा है कि उपरोक्त समय डिस्क डिस्क कैश में नहीं ले रहे हैं। (और डे-ऑब्स्यूसिंग की तुलना में माइकल को स्मूच करने में अधिक रुचि रखने के लिए डेनिस को -0.29)
एंडी लेस्टर

1
मुझे लगता है कि अगर संकेत के बजाय शोर होना चाहिए तो टिप्पणी इसके लिए जगह है। धन्यवाद @Andy जैसा कि मुझे नहीं पता था कि माइकल डिस्क कैश का जिक्र कर रहा था।
डेक्सिजन

3

संपादन में आसानी एकमात्र वास्तविक लाभ है, और यदि आप इसे कमांड लाइन पर कर रहे हैं, तो किसी भी अतिरिक्त समय को चलाने के लिए catऔर पाइप को वास्तव में करने से फर्क नहीं पड़ेगा।

हालांकि शेल स्क्रिप्ट में ऐसा करने का कोई कारण नहीं है।


2

कोई लाभ नहीं है। आदेशों को संशोधित करने के बारे में चिंता करने के बजाय, त्वरक कुंजियों और शॉर्टकट के साथ अपने शेल कमांड लाइन को बेहतर तरीके से नेविगेट करना सीखें।


1

नहीं और यह आपके द्वारा दिए गए उदाहरण में भी मामूली रूप से धीमा हो सकता है।

A pipeको बिल्ली और grep के बीच बनाया गया है, जिसे सीधे grep के फ़ाइल नाम से गुजरते समय आवश्यक नहीं है। हालाँकि मुझे नहीं लगता कि किसी भी परिस्थिति में आप कभी भी इस वजह से थ्रूपुट सीमाओं का पालन करेंगे।

Grep पर इनपुट इनपुट के अन्य लाभों में अतिरिक्त प्रसंस्करण पूर्व शामिल हैं, जैसे कि अधिक उन्नत फ़ाइल पढ़ने की क्षमताओं के साथ उपयोगिताओं का उपयोग। (देखें tee, zcatदूसरों के बीच में)।

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