मैक ओएस 10.10+ पर 'GNU सेड' का उपयोग कैसे करें, 'ब्रुअ इंस्टाल -डेफॉल्ट-नेम' अब समर्थित नहीं है


95

Mac OS 10.10.3 के तहत, मैंने टाइप करके gnu-sed स्थापित किया:

brew install gnu-sed --default-names

जब मैं इसे दोबारा टाइप करता हूं, तो मुझे संदेश मिलता है:

gnu-sed-4.2.2 पहले से स्थापित है

हालाँकि, सिस्टम को रीबूट करने और टर्मिनल को पुनरारंभ करने के बाद भी, मैं अभी भी sed के GNU संस्करण का उपयोग नहीं कर सकता। उदाहरण के लिए:

echo a | sed s_A_X_i

रिटर्न: प्रतिस्थापन कमांड 'i' में खराब ध्वज

जीएनयू संस्करण को काम करने के लिए मुझे क्या करना चाहिए? यहाँ मेरे $ पथ चर में पथ हैं।

/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin 

मुझे क्षमा करें यदि मेरा प्रश्न स्पष्ट लगता है, लेकिन मैं अपने दम पर शेल स्क्रिप्टिंग सीख रहा हूं और अभी तक यह नहीं समझ पाया हूं कि UNIX प्रोग्राम कैसे इंस्टॉल किए जाते हैं। जीएनयू अनुरूप आज्ञाओं का उपयोग करने में कोई मदद (इस मामले में sed, लेकिन जल्द ही मुझे दूसरों की भी आवश्यकता होगी) अपने मैक पर क्षति या अनावश्यक अव्यवस्था पैदा किए बिना बहुत सराहना की जाएगी।


2
कहां brewस्थापित किया गया GNU sed? क्या वह निर्देशिका आपकी है PATH? टाइप करने पर क्या मिलता है sed --version? (बीएसडी sedशिकायत करेगा; जीएनयू sedइसके संस्करण की जानकारी देगा।) जब तक कि brewआपके पीएटीएच के आगे निर्देशिका नहीं है /usr/binया आप जीएनयू को पूर्ण पथनाम का उपयोग करना सीखते हैं sed, तब तक आप जीएनयू नहीं चलाएंगे sed। उद्धरण के साथ भी सावधान रहें। एक शब्द-प्रसंस्करण उद्धरण है, इसके विपरीत '
जोनाथन लेफ्लर 16

जवाबों:


112

नोट (2019):

--with-default-namesविकल्प है हटा दिया जनवरी 2019 के बाद से, इसलिए अब वह विकल्प अब उपलब्ध नहीं है।

स्थापित करते समय, होमब्रेव मार्ग को अनुकूलित करने के तरीके पर निर्देश देता है, यदि कोई gउपसर्ग के बिना sed का उपयोग करना चाहता है ।


आपके पास पहले से ही --with-default-namesविकल्प के बिना ग्नू-सेड स्थापित है ।

  • --with-default-namesविकल्प के साथ यह स्थापित sedहोता है/usr/local/bin/
  • उस विकल्प के बिना यह स्थापित करता है gsed

तो आपके मामले में आप क्या करते हैं:

$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names

जरूरत होने पर अपडेट करें ...

$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'

या gsedदूसरों के सुझाव के अनुसार उपयोग करें ।


8
- डिफ़ॉल्ट-नाम विकल्प अब समर्थित नहीं है
अमोल

49

जब आप sedMac OS X के लिए GNU संस्करण का उपयोग करते हैं:

$ brew install gnu-sed

प्रोग्राम जो आप उपयोग करते हैं gsed

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

$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken

इसके अलावा, मैक ओएस एक्स पर जीएनयू कमांड टूल के उपयोग की प्रशंसा करने के लिए, लिनक्स से उपकरण प्राप्त करने के लिए यहां एक अच्छा ब्लॉग पोस्ट है:

मैक ओएस / ओएस एक्स पर जीएनयू कमांड लाइन टूल इंस्टॉल और उपयोग करें


19

sedओएस एक्स के साथ कि जहाजों में है /usr/bin

sedकि homebrewस्थापित करता है /usr/local/bin

यदि आप homebrewएक का उपयोग करना पसंद करते हैं , तो आपके पास दो विकल्प हैं:

विकल्प 1

हर बार जब आप उपयोग करना चाहते हैं homebrew sed, टाइप करें

/usr/local/bin/sed

या, अधिमानतः

विकल्प 2

ले जाएँ /usr/local/bin/आगे (यानी पहले) /usr/binअपनी प्रवेश प्रोफ़ाइल में अपना पथ में, इस तरह

 export PATH=/usr/local/bin:<other places>

16

$ brew install gnu-sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

इन दो आदेशों के साथ gnu-sed ठीक से काम करता है


याद रखें कि यह केवल वर्तमान टर्मिनल सत्र के लिए काम करता है
महेशमंज

8

यदि आपको उनके सामान्य नामों के साथ gnu-sed कमांड का उपयोग करने की आवश्यकता है, तो आप अपने bashrc से अपने PATH में "gnubin" निर्देशिका जोड़ सकते हैं। बस अपने bash या टर्मिनल में निम्न कमांड का उपयोग करें।

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

2

--with-default-namesपर मैक ओएस एक्स 10.14.2 मेरे लिए काम नहीं किया तो मैं नाम के एक सिमलिंक बनाया sedकरने gsedमें उच्च$PATH

मैंने मैनपेज के नाम sed.1से एक सिमलिंक भी बनाया है ताकि डिफ़ॉल्ट मैनपेज के बजाय मैनपेज का उपयोग किया जा सकेgsed.1$MANPATHmangsedsed


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