আমি 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
?