awk + print line केवल अगर पहला क्षेत्र Linux 1 के रूप में स्ट्रिंग से शुरू होता है


16

लाइन 1 लिनक्स के साथ शुरू होने की स्थिति में कैसे प्रिंट करें

उदाहरण के लिए:

  echo Linux1_ver2  12542 kernel-update  |   awk '{if ($1 ~ Linux1 ) print $0;}'

लक्ष्य लाइन को प्रिंट करना है, जबकि पहला क्षेत्र लिनक्स 1 से शुरू होता है

लाइनों का उदाहरण:

Linux1-new  36352 Version:true
Linux1-1625543  9847
Linux1:16254 8467563 

टिप्पणी - अंतरिक्ष या TAB पहले दायर किए जाने से पहले हो सकता है

जवाबों:


15

एक रास्ता:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'

$ 1 और ^ निरर्थक हैं। आपका प्रस्ताव टैब कवर नहीं करता है।
हौके लैजिंग

@HakeLaging आपको क्यों लगता है कि $ 1 और ^ बेमानी हैं? मुझे पूरा यकीन है कि दोनों की आवश्यकता है ताकि पहला शब्द केवल के खिलाफ मेल खाता हो, और इसलिए कि मैच शुरू होने पर लंगर डाले (उदाहरण के लिए, "mLinux" / Linux1 / द्वारा मिलान किया जा सकता है, लेकिन / ^ Linux / द्वारा नहीं)।
निक बुल

19

awk खेतों को असाइन करते समय प्रमुख रिक्त स्थान की उपेक्षा करता है। डिफ़ॉल्ट कमांड प्रिंट है।

awk '$1 ~ /^Linux1/'

क्या आप चाहते हैं

विस्तृत विवरण:

  • $ 1 पहले "कॉलम" को देखने के लिए अजीब बताता है।
  • ~ रेगुलर एक्सप्रेशन मैच करने के लिए awk को बताता है / / एक रेगुलर एक्सप्रेशन है।
  • आरई के भीतर स्ट्रिंग लिनक्स और विशेष चरित्र ^ है।
  • ^ आरई शुरू से मैच के लिए कारण बनता है (लाइन में कहीं भी मिलान के विपरीत)।

एक साथ देखा: अक्क पहले कॉलम की शुरुआत में "लिनक्स" के साथ एक नियमित अभिव्यक्ति से मेल खाएगा।


2

यह इस विशिष्ट मामले के लिए काम करना चाहिए।

awk '/^[[:blank:]]*Linux1/ {print}'

लेकिन अगर स्पेस लिनक्स 1 से पहले है तो यह मैच नहीं होगा
येल

@ येल मैंने इसे ठीक करने के लिए एक संपादन किया।
हक लेजिंग

+1 यह सिंटैक्स क्या कर रहा है, यह सोचकर: यह कह रहा है कि "ब्रेसेस के अंदर की चीजें तभी करें जब रेगेक्स उस लाइन से मेल खाता हो"।
user541686
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.