আমি sed -eসরল প্রতিস্থাপনের জন্য, স্যুইচ সম্পর্কে কোনও ডকুমেন্টেশন পাচ্ছি না, আমার এটির কি দরকার?
যেমন
sed 's/foo/bar/'
বনাম
sed -e 's/foo/bar/'
আমি sed -eসরল প্রতিস্থাপনের জন্য, স্যুইচ সম্পর্কে কোনও ডকুমেন্টেশন পাচ্ছি না, আমার এটির কি দরকার?
যেমন
sed 's/foo/bar/'
বনাম
sed -e 's/foo/bar/'
উত্তর:
ম্যান পৃষ্ঠা থেকে:
-e script, --expression=script
add the script to the commands to be executed
সুতরাং আপনি -eঅনেকগুলি অংশের বাইরে একটি স্ক্রিপ্ট তৈরি করতে একাধিক বিকল্প ব্যবহার করতে পারেন ।
$ sed -e "s/foo/bar/" -e "/FOO/d"
প্রথম প্রতিস্থাপন করবে fooসঙ্গে barএবং তারপর ধারণকারী প্রত্যেক লাইন মুছে ফেলতে FOO।
-e
এটি আপনার পক্ষে কাজ করতে পারে:
sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file
প্রতিটি ক্ষেত্রে i(সন্নিবেশ), a(সংযোজন) এবং c(পরিবর্তন) আদেশগুলি একটি নতুন লাইন দ্বারা সমাপ্ত করা প্রয়োজন।
সাধারণত কমান্ডগুলি একটি ;উদাহরণ দ্বারা পৃথক করা যায় /foo/d;/bar/dএবং {...} যেমন দ্বারা ভাগ করা যায় /foo/{h;d}তবে i,a,cকমান্ডগুলির জন্য কমান্ড -eপৃথক করার একটি উপায় সরবরাহ করে।
বিকল্পটি হ'ল নতুন লাইন inোকাতে শেল (ব্যাশ) ব্যবহার করা:
sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file
-eসেমিকোলনগুলির পরিবর্তে নিউ লাইন / ব্যবহার করে লেবেল এবং শাখা কমান্ডও শেষ করতে হবে । এই কাজ করবে না: sed ':a; /x/ { s/x/y/g; ba }; q' <<< "jxm"। তবে এটি sed -e ':a' -e '/x/ { s/x/y/g; ba' -e '}; q' <<< "jxm"
must be terminated with a newlineযে এখানে প্রয়োজনীয় অর্থবোধটি কীভাবে প্রয়োজনীয় । যখন আমি এখানে পরীক্ষিত আমার cygwin, এই কাজ করে: sed '/foo/i\bar' file। সুতরাং এখন যেহেতু আমরা পৃথক ভাবগুলি এক সাথে মিশ্রিত করতে পারি, এটি আবার মূল প্রশ্নটিতে উত্থাপিত হয়: এর আসল উদ্দেশ্যটি কী -e?
আপনার সহায়তায় sedআপনি খুঁজে পাবেন যে -eপতাকাটি এর জন্য দাঁড়িয়েছে:
-e script, --expression=script
add the script to the commands to be executed
তবে আপনি মুখোমুখি হওয়ার পরে প্রথম বিভ্রান্ত নন -e। আপনার উদাহরণ sed 's/foo/bar/'এবং sed -e 's/foo/bar/'সমতুল্য। উভয় ক্ষেত্রেই s/foo/bar/হয় স্ক্রিপ্ট যে sed দ্বারা সঞ্চালিত হয়। দ্বিতীয় বিকল্পটি আরও সুস্পষ্ট, তবে সম্ভবত এটি আপনি প্রায়শই -eব্যবহৃত দেখতে পান না । এর কারণ হ'ল -eএকই অনুরোধ সহ একাধিক স্ক্রিপ্ট ব্যবহার করা সম্ভব করে sed। এটি এখনও প্রশ্ন রেখে গেছে যে আপনি যদি কেবল একটি স্ক্রিপ্ট ব্যবহার করেন তবে এটি কেন ব্যবহার করবেন? নিম্নলিখিত উদাহরণটি এটি ব্যাখ্যা করতে পারে:
echo "foo" | sed -e 's/foo/bar/' -e 's/bar/foo'
"ফু" আউটপুট দেবে।
যাহোক,
echo "foo" | sed 's/foo/bar/' -e 's/bar/foo'
ব্যর্থ হবে কারণ এখন sedপ্রথমটিকে s/foo/barফাইলের নাম হিসাবে ব্যাখ্যা করে । অতএব, আপনার ভবিষ্যতের জন্য জীবনকে আরও সহজ করতে আপনি ইতিমধ্যে -eআজ পতাকা ব্যবহার শুরু করতে পারেন । এই পথে ভবিষ্যতে আপনি কেবলমাত্র একটি অতিরিক্ত স্ক্রিপ্ট ব্যবহার করে কমান্ড যুক্ত করতে পারেন -e <script>।
এনবি অন্যান্য উত্তরে ;একাধিক স্ক্রিপ্ট ব্যবহারের বিকল্প হিসাবে ব্যবহার করার পরামর্শ দেওয়া হয়েছে। যদিও কিছু ক্ষেত্রে এটি প্রযুক্তিগতভাবে সম্ভব, এটি উত্সাহিত হয় না, কারণ এটি দ্রুত কোড পড়তে খুব শক্ত করে তোলে। এখানে একটি উদাহরণ দেখুন: https://www.grymoire.com/Unix/Sed.html#uh-61
man sed?