আমি কীভাবে স্ট্যান্ডার্ড ইনপুট থেকে পড়তে পারি? [নকল]


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

এবং এটি প্রদর্শিত হয় যে কোনও কারণে আমার মন্তব্যকে সেডের ইনপুট হিসাবে খাওয়ানো হচ্ছিল। খুব অদ্ভুত.


আপনি কি নিজের ফাইলটি প্রতিস্থাপনের জায়গায় 'withthis' দিয়ে প্রতিস্থাপন করতে চান?
তেজা

4
না, আপনি যা চেষ্টা করছেন তা নয়। আরও কিছু নিখোঁজ রয়েছে।
Ignacio Vazquez-Abram

6
আমার সেরা অনুমান আপনি একটি আছে আপনার আসল ক্ষেত্রে হয় /যে replacemeবা withthis। চেষ্টা করুন: 's#replaceme#withthis#g'
কাবাবুঙ্গা

4
একটি জিনিস যা আপনি ভুল করছেন তা হ'ল আপনি যা চালাচ্ছেন তা হ'ল আমাদের প্রদর্শন করা। আপনার প্রদর্শিত কোডটি ঠিক আছে; আপনি যা সম্পাদন করছেন তাতে আপনার সমস্যা হয়েছে; তবে, আপনি কী চালাচ্ছেন তা আমাদের দেখিয়ে দিচ্ছেন না। আমরা বেশিরভাগ সময় যা দেখতে পাই না তা আমরা ডিবাগ করতে পারি না। কখনও কখনও, আমরা ভাগ্যবান পেতে এবং সঠিক অনুমান করব, তবে আমাদের অনুমান করা বা ভাগ্যবান হওয়া উচিত নয়।
জোনাথন লেফলার

4
গ্রেপ ব্যবহারের অকেজো ব্যবহার। সেড সহ, আপনি এটি করতে পারেন: সেড '/ সার্চটার্ম / গুলি / প্যাটার্ন / রিপ্লেসমেন্ট / জি' myfile.csv
উইলিয়াম পার্সেল

উত্তর:


121

--expression বিকল্পটি ব্যবহার করুন

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

+ SOaddict, এটি কেবল স্টডআউট আউটপুট করছে, এটি মাইফাইল সিএসভি পরিবর্তন করছে না।
জোশিয়ায়

4
আপনি যদি ফাইলটির কোনও ইন-প্লেস আপডেট করতে চান তবে আমার মনে হয় আমার উত্তর যথেষ্ট পরিমাণে এই সমস্যাটির সমাধান করে।
ওয়েস

যা কিছু দেখায় grep 'x' y | sed 'z'তা রিফ্যাক্টর করা যায় sed '/x/z' y। এর অকেজো ব্যবহারওgrep
ট্রিপলই

40

সেড-এক্সপ্রেশন নির্দিষ্ট করতে "-e" ব্যবহার করুন

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

4
আমি ভাবছিলাম যে "-e" ব্যবহার করে সেড-এক্সপ্রেশন নির্দিষ্ট করে কীভাবে স্টিডিনের কাছ থেকে পড়তে পারবেন? ডিফল্টভাবে সেডিন স্ট্যান্ডিন থেকে পড়ে?
টিম

4
হ্যাঁ. বেশিরভাগ আন * এক্স সরঞ্জামগুলির মতো, sedস্ট্যান্ডিন থেকে পড়ে যদি কোনও ইনপুট ফাইল উপস্থিত না থাকে।
umläute

ধন্যবাদ হয় -eপ্রয়োজনীয়? এটি ছাড়া কাজ করে -e। আমি ভাবছি ব্যবহারের উদ্দেশ্য কী -e? ধন্যবাদ
টিম

4
আমি নিশ্চিত না যে আমি ওপির প্রশ্নটি বুঝতে পেরেছি। আউটপুট করে, 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


-17
  1. ব্যবহার করে ফাইলটি খুলুন vi myfile.csv
  2. টিপুন Escape
  3. প্রকার :%s/replaceme/withthis/
  4. টাইপ :wqএবং টিপুনEnter

আপনার ফাইলটিতে এখন নতুন প্যাটার্ন থাকবে।


11
ওএম জানতে চেয়েছিল কীভাবে এটি সিমে দিয়ে করা যায়, ভিমের সাথে নয়।
নো নিতো

4
নো কি বলেছে। এছাড়াও, আপনার ভিম দ্রবণটি সেড বিকল্পের (গুলি) থেকে নিকৃষ্ট, কারণ এটি (সহজেই) স্ক্রিপ্টযোগ্য নয়।
weberc2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.