Grep कमांड का उपयोग करके पहली पंक्ति कैसे प्रिंट करें?


17

मेरे पास फाइल है file.txt। मैं केवल grepकमांड का उपयोग करके पहली पंक्ति कैसे प्रिंट कर सकता हूं ?


4
head -1 file.txtकाम नहीं करेगा ?
क्लर्क

@steeldriver आपको इसे एक उत्तर के रूप में बनाने की आवश्यकता है क्योंकि यह grep के साथ करने का तरीका है, नौकरी के लिए अजीब रूप से चयनित टूल।
मेलबर्सलान

1
grepफ़ाइल की पहली पंक्ति को प्रिंट करने के लिए सबसे अच्छा उपकरण नहीं है। यदि आप बस का मतलब है कि आप के साथ मिलान पहली पंक्ति मुद्रित करना चाहते थे grep, या यदि आप के लिए कुछ विशिष्ट उपयोग है grep, तो कृपया हमें बताएं कि वह क्या है। यदि हमारे पास अधिक संदर्भ होता, तो शायद हम एक जवाब दे सकते थे जो आपकी और समुदाय की बेहतर मदद करता।
DK

@MelBurslan फ़ाइल में। उदाहरण के लिए मेरे पास तीन लाइनें हैं: यह एक नई फ़ाइल है। दूसरी पंक्ति: फ़ाइल का नाम नया है तीसरी पंक्ति: मैंने नई लाइन नहीं बनाई है। तो grep कमांड का उपयोग करके मैं केवल पहली पंक्ति कैसे प्रिंट कर सकता हूं? यह भी कि किस कमांड से मुझे पहली और अंतिम पंक्ति को प्रिंट करने में मदद मिलेगी? क्या तुम लोग मुझे दोनों प्रश्नों के लिए आज्ञा दे सकते हो?
नितिन संतोष २०

यदि कोई मौजूदा उत्तर आपकी समस्या को हल करता है, तो कृपया इसे चेकमार्क के माध्यम से स्वीकार करने पर विचार करें। धन्यवाद!
जेफ स्कालर

जवाबों:


38

हालाँकि यह grep का एक अपरंपरागत अनुप्रयोग है, आप इसका उपयोग कर सकते हैं

grep -m1 "" file.txt

यह काम करता है क्योंकि खाली अभिव्यक्ति कुछ भी मेल खाती है, जबकि -m1पहले मैच के बाद grep बाहर निकलने का कारण बनता है

-m NUM, --max-count=NUM
       Stop reading a file after NUM matching lines.

+1 यह दिखाने के लिए कि चॉकलेट से ढका हुआ केला यहां उतना बेकार नहीं है जितना मैंने सोचा था।
कामिल मैकियोरोस्की

4
: कुछ सिस्टम पर है कि हो सकता है काम, लेकिन ऐसा नहीं पोर्टेबल हैgrep: unknown option -- m
Kusalananda

1
'पहली पंक्ति' और 'पहली पंक्ति का मिलान' के बीच अंतर पर ध्यान दें
चार्ल्स

13

यह कुछ grepनहीं है। "Grep" नाम अपने आप में " विश्व स्तर पर एक नियमित अभिव्यक्ति और प्रिंट की खोज " के लिए एक संक्षिप्त नाम है , जो कि edकमांड क्या g/re/pकरता है (किसी दिए गए नियमित अभिव्यक्ति के लिए re)।

ed1969 से एक इंटरेक्टिव लाइन संपादक है, लेकिन यह संभवत: आज भी आपके सिस्टम पर स्थापित है। हमारे पास grepसे ed, और यह एक शॉर्टकट या अन्य नाम का एक विशिष्ट कार्यक्षमता के लिए के रूप में देखा जा सकता है ed, और sedहै, जो "stream- है ed", यानी एक (गैर-सहभागी) धारा संपादक।

sedइसके बजाय उपयोग करें :

$ sed -n '1p' file.txt

1pस्ट्रिंग एक छोटे से है sed"स्क्रिप्ट" है कि प्रिंट ( p) लाइन दिए गए पते (करने के लिए इसी 1, पहली पंक्ति)। एडिटिंग कमांड 1p(कोई आश्चर्य की बात नहीं) वैसे ही edसंपादक में काम करेगा।

-n, कुछ भी स्पष्ट रूप से स्क्रिप्ट के द्वारा मुद्रित नहीं के उत्पादन को दबा तो हम सभी मिल फ़ाइल की पहली पंक्ति है file.txt

वैकल्पिक रूप से:

$ sed '1q' file.txt

यह फ़ाइल की सभी पंक्तियों को प्रिंट करता है, लेकिन qपंक्ति 1 पर (इसे प्रिंट करने के बाद) क्विट करता है। यह बिल्कुल इसके बराबर है head -n 1 file.txt

POSIX मानक में यह कहता है (सामान्यीकरण) जो कि head -n Nबहुत समान है sed 'Nq', अर्थात "प्रत्येक पंक्ति को प्रिंट करें, लेकिन लाइन पर छोड़ दें N"। कारण headको मानक में शामिल किया गया था समरूपता tail(और मौजूदा यूनिक्स कार्यान्वयन के साथ पीछे की संगतता) के कारण था।


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

6

जब तक पहली पंक्ति में एक अद्वितीय स्ट्रिंग नहीं होती है आप केवल grep का उपयोग करके ऐसा नहीं कर सकते। head -n 1 file.txtअपनी जगह काम करेगा।

यदि आप केवल पहली पंक्ति को प्रिंट करना चाहते हैं यदि यह एक पैटर्न से मेल खाता है तो grep में पाइप का सिर डालें

head -n 1 * | grep [pattern]


2

ग्रीप का एक और अपरंपरागत उपयोग - एक श्वार्टज़ियन ट्रांसफ़ॉर्म जो लाइनों को संख्या करने के लिए कई gyrations के माध्यम से जाता है, फिर लाइन नंबर की तलाश करने के लिए grep का उपयोग करता है, फिर लाइन नंबर को वापस बंद करें:

function grep1() (
  nlines=$(wc -l < "$1")
  nlw=$(printf "%d" "$nlines" | wc -c)
  nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep '^1 ' | sed 's/^1 *//'
)

function greplast() (
  nlines=$(wc -l < "$1")
  nlines=$((nlines + 0))
  nlw=$(printf "%d" "$nlines" | wc -c)
  nl -d '\n' -ba -n ln -w "$nlw" -s ' ' "$1" | grep "^$nlines " | sed "s/^$nlines *//"
)

मैं इस उत्तर को इस विचार के उदाहरण के रूप में यहां रख रहा हूं कि सिर्फ इसलिए कि आप (grep या bash या ... आदि) में कुछ कर सकते हैं, इसका मतलब यह नहीं है कि आपको नौकरी के लिए बेहतर उपकरण चाहिए । फ़ाइल से पहली पंक्ति को प्रिंट करने के लिए सेड ( sed 1qया sed -n 1p) और हेड ( head -n 1) अधिक उपयुक्त उपकरण हैं। किसी फ़ाइल की अंतिम पंक्ति को प्रिंट करने के लिए, आपके पास tail -n 1या हैsed -n '$p'। न केवल ये उपकरण एक ही आदेश हैं (उपरोक्त कार्यों में 3+ के बजाय), वे भविष्य के पाठकों के लिए भी बहुत स्पष्ट हैं - शायद खुद! - उन लिपियों का जो वे अंदर हैं। जबकि मैं आपके प्रश्न के नीचे (वर्तमान में 3) मतदाताओं में से एक नहीं हूं, यह संभावना है कि नौकरी के लिए एक मनमाना उपकरण पर आपका आग्रह (बिना किसी समर्थन के) डाउनवोट्स। यह अत्यंत संभावना नहीं है एक प्रणाली है कि कि grepयह भी नहीं है head, tailऔर sed

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