मुझे मानक इनपुट से पढ़ने के लिए sed कैसे मिलता है? [डुप्लिकेट]


91

मैं कोशिश कर रहा हूँ

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'

और हो रही है

unknown option to `s'

मैं क्या गलत कर रहा हूं?

संपादित करें:

टिप्पणियों के अनुसार कोड वास्तव में सही है। मेरा पूरा कोड निम्नलिखित जैसा कुछ था

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment

और ऐसा प्रतीत होता है कि किसी कारण से मेरी टिप्पणी को sed में इनपुट के रूप में खिलाया जा रहा था। बहुत अजीब।


क्या आप अपनी फ़ाइल को बदले के स्थान पर 'withthis' से बदलना चाहते हैं?
तेजा

2
नहीं, यह वह नहीं है जो आप कोशिश कर रहे हैं। वहाँ कुछ और याद आ रही है।
इग्नासियो वाज़केज़-अब्राम्स

6
मेरे सर्वोत्तम अनुमान आप एक है कि अपने वास्तविक मामले में है /में replacemeया withthis। प्रयास करें: 's#replaceme#withthis#g'
काबंगुंगा

4
एक बात जो आप गलत कर रहे हैं वह हमें वह नहीं दिखा रहा है जो आप निष्पादित कर रहे हैं। आपके द्वारा दिखाया गया कोड ठीक है; जो आप निष्पादित कर रहे हैं उसके साथ एक समस्या है; एर्गो, आप हमें नहीं दिखा रहे हैं कि आप क्या कर रहे हैं। हम उस चीज़ को डिबग नहीं कर सकते हैं जो हम नहीं देख सकते हैं, ज्यादातर समय। कभी-कभी, हम भाग्यशाली होंगे और सही अनुमान लगाएंगे, लेकिन हमें अनुमान लगाने या भाग्यशाली होने के लिए नहीं होना चाहिए।
जोनाथन लेफ़लर

1
बेकार का उपयोग। Sed के साथ, आप यह कर सकते हैं: sed '/ searchterm / s / pattern / प्रतिस्थापन / g' myfile.csv
विलियम पर्ससेल

जवाबों:


120

the-expression विकल्प का उपयोग करें

grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'

+ SOADdict, यह सिर्फ stdout के लिए आउटपुट है, यह myfile.csv को नहीं बदल रहा है।
योशिय्याह

1
यदि आप फ़ाइल का इन-प्लेस अद्यतन करना चाहते हैं, तो मुझे लगता है कि मेरा उत्तर उस मुद्दे को पर्याप्त रूप से हल करता है।
वेस

जो कुछ भी दिखता है grep 'x' y | sed 'z'उसे फिर से देखा जा सकता है sed '/x/z' y। का बेकार उपयोगgrep
ट्रिपल

39

"-ई" का उपयोग सेड-एक्सप्रेशन को निर्दिष्ट करने के लिए करें

cat input.txt | sed -e 's/foo/bar/g'

1
मैं सोच रहा था कि स्टैड से पढ़ने के लिए सेड-एक्सप्रेशन को सेड करने के लिए "-ई" का उपयोग कैसे किया जा सकता है? क्या स्टड से डिफ़ॉल्ट रूप से पढ़ा जाता है?
टिम

1
हाँ। sedयदि कोई इनपुट फ़ाइल मौजूद नहीं है, तो अधिकांश un * x टूल्स की तरह, स्टड से पढ़ता है।
umläute

धन्यवाद। है -eआवश्यक? यह बिना काम करता है -e। मुझे आश्चर्य है कि उपयोग करने का उद्देश्य क्या है -e? धन्यवाद।
टिम

2
मुझे यकीन नहीं है कि मैं ओपी के सवाल को समझता हूं। आउटपुट के echo foo | sed 's/foo/bar/g'बिना -e, बिना काम करता है bar। तो मुझे उसका सवाल याद आ गया होगा।
टिम

यह निर्दिष्ट करने की आवश्यकता नहीं है कि -eक्या आपके पास केवल एक ही स्क्रिप्ट विवरण है। यदि आपके पास दो हैं, तो आप कह सकते हैं sed -e '/foo/!d' -e 's//bar/g'या sed 's/foo!d;s//bar/g'(या समकक्ष, अर्धविराम के बजाय एक नई पंक्ति के साथ)।
ट्रिपल

6

sedस्टड से पकड़ने के लिए , एक फ़ाइल के बजाय, आपको उपयोग करना चाहिए -e

इस कदर:

curl -k -u admin:admin https://$HOSTNAME:9070/api/tm/3.8/status/$HOSTNAME/statistics/traffic_ips/trafc_ip/ | sed -e 's/["{}]//g' |sed -e 's/[]]//g' |sed -e 's/[\[]//g' |awk  'BEGIN{FS=":"} {print $4}'

2

यदि आप किसी फ़ाइल के भीतर पाठ का इन-प्लेस अपडेट करने की कोशिश कर रहे हैं, तो यह मेरे दिमाग में बहुत आसान है।

grep -Rl text_to_find directory_to_search 2>/dev/null | while read line; do  sed -i 's/text_to_find/replacement_text/g' $line; done


-16
  1. फ़ाइल का उपयोग कर खोलें vi myfile.csv
  2. दबाएँ Escape
  3. प्रकार :%s/replaceme/withthis/
  4. टाइप करें :wqऔर दबाएँEnter

अब आपकी फाइल में नया पैटर्न होगा।


11
ओपी यह जानना चाहता था कि इसे सिड के साथ कैसे करना है, विम के साथ नहीं।
नी नीटो

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