पाइपिंग के साथ 'सेड' का उपयोग कैसे करें


34

मैं एक स्ट्रिंग से प्रतिस्थापित करना चाहता हूँ grep, मेरे पास है:

$ npm info webpack | grep version 

यह मुझे आउटपुट करता है

$ version: '2.1.0-beta.12',

लेकिन मेरे पास है:

$ 2.1.0-beta.12

इसलिए मुझे लगता है कि मैं sedअनावश्यक सबस्ट्रिंग का उपयोग करके उसे प्राप्त कर सकता हूं । लेकिन यहाँ मेरे लिए कठिन हिस्सा है:

$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command

मेरा लक्ष्य कैसे प्राप्त कर सकते हैं?

जवाबों:


30

यदि आप sed का उपयोग करने जा रहे हैं, तो grep का उपयोग करने की भी आवश्यकता नहीं है। प्रयत्न:

npm info webpack | sed -En "s/version: '(.*)',/\1/p"

उदाहरण:

$ echo  "version: '2.1.0-beta.12'," | sed -En "s/version: '(.*)',/\1/p"
2.1.0-beta.12

वैकल्पिक: awk का उपयोग करना

इसी तरह, अगर हम awk का उपयोग करते हैं, तो भी grep करने की कोई आवश्यकता नहीं है:

npm info webpack | awk -F"[ ',]+" '/version:/{print $2}'

उदाहरण:

$ echo  "version: '2.1.0-beta.12'," | awk -F"[ ',]+" '/version:/{print $2}'
2.1.0-beta.12

यह काम किस प्रकार करता है:

  • -F"[ ',]+"

    यह रिक्त स्थान, एकल उद्धरण या अल्पविराम या क्षेत्र विभाजक के रूप में किसी भी संयोजन का उपयोग करने के लिए अजीब बताता है।

  • /version:/{print $2}

    यदि एक पंक्ति शामिल है version:, तो दूसरे फ़ील्ड को प्रिंट करें।


2
-Eविकल्प स्पष्ट रूप से ERE वाक्य-विन्यास का उपयोग करने का मतलब है, लेकिन मेरे जीएनयू sed 4.2.2 मैनुअल केवल उल्लेख है -r-Eहालांकि काम करता है!
Law29

2
@ कानून २ ९। सभी यथोचित आधुनिक GNU sed के लिए, हालांकि, इसके -Eलिए एक अनिर्दिष्ट पर्याय है -r। अफवाह यह है कि POSIX पर बस गया है -E, जिसे बीएसडी / ओएसएक्स पहले से ही उपयोग करता है, और, अगर इसे अंतिम मानक में जोड़ा जाता है, तो हम सभी को संक्रमण हो जाएगा -E
8:10 बजे जॉन 1024

6

sedस्थानापन्न आदेश ( s), एक खोज पैटर्न और एक प्रतिस्थापन स्ट्रिंग की उम्मीद है। आपने इसे केवल एक खोज पैटर्न प्रदान किया है। आपको शेल में ठीक से तार भी उद्धृत करना चाहिए:

$ npm info webpack | grep 'version:' | sed 's/version: //'

यह आपको परिणाम देगा '2.1.0-beta.12',, जो आप चाहते हैं वह काफी नहीं है।

चूंकि उत्पादन grepइतना सरल है, आप लाइन के दूसरे क्षेत्र को प्राप्त करने के लिए cutसीमांकक के साथ उपयोग कर सकते हैं '(जटिल नियमित जीवन की आवश्यकता के बिना):

$ npm info webpack | grep -F 'version:' | cut -d "'" -f 2

यह आपको देगा 2.1.0-beta.12

मैंने यह भी कहा -Fकि grepजिस स्ट्रिंग की आप खोज करते हैं वह एक निश्चित स्ट्रिंग है , न कि एक नियमित अभिव्यक्ति।


1

सबसे पहले, आप का उपयोग करने की कोशिश कर सकते हैं sed:

npm info webpack | grep version: | sed 's/version: //'

या आप उपयोग कर सकते हैं awk:

npm info webpack | grep version: | awk '{print $2}'

जो शायद आसान है।

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