সেড কমান্ড-এ এর উদ্দেশ্য কী?


41

আমি sed -eসরল প্রতিস্থাপনের জন্য, স্যুইচ সম্পর্কে কোনও ডকুমেন্টেশন পাচ্ছি না, আমার এটির কি দরকার?

যেমন

sed 's/foo/bar/'

বনাম

sed -e 's/foo/bar/'

14
আপনি কি নিশ্চিত যে এটি এটি খুঁজে পান নি man sed?

4
আপনি পোটং ব্যাখ্যা খুঁজে পাবেন না, কেন "সেমিডি 1; সেমিডি 2" ব্যবহার করবেন না
ব্যবহারকারী অজানা

উত্তর:


28

ম্যান পৃষ্ঠা থেকে:

-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


3
সুতরাং, আপনার যদি কেবল একটি স্ক্রিপ্ট থাকে, আপনার '-e' দরকার নেই?
জনিটেক্স

আমি বললাম, সেখানেও সত্য উদ্দেশ্যে খুজছি-e
typelogic

27

এটি আপনার পক্ষে কাজ করতে পারে:

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

1
কমপক্ষে কিছু সেড বাস্তবায়ন (উদাহরণস্বরূপ, ফ্রিবিএসডি তে), আপনাকে -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?
টাইপলজিক

1

-eসমতুল্য --expression, optionচ্ছিক, যদি না আপনি অন্য উত্তরে দেখানো মত কয়েকটি এক্সপ্রেশনকে একসাথে স্ট্রিং করেন (সাধারণ না) ।

একপাশে: ;বিভিন্ন এক্সপ্রেশন একের পর এক চালানো একই অভিব্যক্তি পরিবর্তে ব্যবহার করা যাবে।


0

আপনার সহায়তায় 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.