কম্পিউটার টিউটোরিয়াল

অ্যাডভান্সড সেড প্রতিস্থাপন:বিশেষজ্ঞ কৌশল এবং ব্যবহারিক উদাহরণ

অ্যাডভান্সড সেড প্রতিস্থাপন:বিশেষজ্ঞ কৌশল এবং ব্যবহারিক উদাহরণ এই নিবন্ধটি চলমান ইউনিক্স সেড টিপস এবং ট্রিক্স সিরিজের অংশ।

আমাদের আগের sed নিবন্ধগুলিতে আমরা শিখেছি — sed প্রিন্টিং, sed মুছে ফেলা, sed বিকল্প , sed ফাইল লিখতে এবং একাধিক কমান্ড sed৷

এই নিবন্ধে, আসুন কিছু বাস্তব উদাহরণ সহ sed-এ "s" বিকল্প কমান্ডের সাথে কিছু আকর্ষণীয় সমাধান পর্যালোচনা করি৷

আমি। Sed প্রতিস্থাপন ডিলিমিটার

যেমন আমরা আমাদের আগের পোস্টে আলোচনা করেছি, আমরা বিভিন্ন ডিলিমিটার যেমন @% | ব্যবহার করতে পারি; :sed বিকল্প কমান্ডে।

আসুন প্রথমে path.txt ফাইল তৈরি করি যা নীচে উল্লিখিত সমস্ত উদাহরণে ব্যবহার করা হবে।

$ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

উদাহরণ 1 – sed @ delimiter:বিকল্প /opt/omni/lbin কে /opt/tools/bin

যখন আপনি একটি পথের নাম প্রতিস্থাপন করেন যার '/' থাকে, আপনি '/'-এর পরিবর্তে @ একটি বিভাজন হিসাবে ব্যবহার করতে পারেন। নীচের sed উদাহরণে, ইনপুট ফাইলের শেষ লাইনে, /opt/omni/lbin পরিবর্তন করে /opt/tools/bin করা হয়েছে।

$ sed 's@/opt/omni/lbin@/opt/tools/bin@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

উদাহরণ 2 – sed / delimiter:বিকল্প /opt/omni/lbin কে /opt/tools/bin

যখন আপনার পাথ নাম সম্পর্কিত প্রতিস্থাপনে '/' ব্যবহার করা উচিত, তখন আপনাকে নীচে দেখানো হিসাবে প্রতিস্থাপন ডেটাতে '/' এড়িয়ে যেতে হবে। এই সেড উদাহরণে, REGEXP এবং REPLACEMENT অংশে ডিলিমিটার ‘/’ এস্কেপ করা হয়েছে।

$ sed 's/\/opt\/omni\/lbin/\/opt\/tools\/bin/g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

II. Sed '&' Get Matched String

একটি ইনপুট লাইনের সুনির্দিষ্ট অংশ যার উপর রেগুলার এক্সপ্রেশন মেলে &দ্বারা প্রতিনিধিত্ব করা হয়, যা তারপর প্রতিস্থাপন অংশে ব্যবহার করা যেতে পারে।

উদাহরণ 1 – sed এবং ব্যবহার:বিকল্প /usr/bin/ থেকে /usr/bin/local

$ sed 's@/usr/bin@&/local@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin/local:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin/local:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

উপরের উদাহরণে '&' প্রতিস্থাপন অংশে /usr/bin এর সাথে প্রতিস্থাপন করবে যা মিলিত প্যাটার্ন এবং এটিকে /local এর সাথে যুক্ত করবে। সুতরাং আউটপুটে /usr/bin এর সমস্ত উপস্থিতি /usr/bin/local

দিয়ে প্রতিস্থাপিত হবে

উদাহরণ 2 – sed এবং ব্যবহার:পুরো লাইনের সাথে মিল করুন

এবং প্রদত্ত REGEXP এর সাথে যা কিছু মিলে যায় তা প্রতিস্থাপন করে।

$ sed 's@^.*$@<<<&>>>@g' path.txt
<<</usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin>>>
<<</usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:>>>
<<</opt/omni/lbin:/opt/omni/sbin:/root/bin>>>

উপরের উদাহরণে regexp-এ “^.*$” আছে যা পুরো লাইনের সাথে মেলে। প্রতিস্থাপন অংশ <<<&>>> লাইনের শুরুতে এবং শেষে যথাক্রমে <<<এবং>>> দিয়ে পুরো লাইনটি লেখে।

III. Sed

-এ গ্রুপিং এবং ব্যাক-রেফারেন্স

গ্রুপিং সাধারণ রেগুলার এক্সপ্রেশনের মতো sed-এ ব্যবহার করা যেতে পারে। একটি গ্রুপ “\(” দিয়ে খোলা হয় এবং “\)” দিয়ে বন্ধ করা হয়। গ্রুপিং ব্যাক-রেফারেন্সিংয়ের সাথে ব্যবহার করা যেতে পারে।

ব্যাক-রেফারেন্স হল গ্রুপিং দ্বারা নির্বাচিত একটি রেগুলার এক্সপ্রেশনের একটি অংশের পুনরায় ব্যবহার। sed-এ ব্যাক-রেফারেন্সগুলি রেগুলার এক্সপ্রেশন এবং বিকল্প কমান্ডের প্রতিস্থাপন অংশ উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে।

উদাহরণ 1:প্রতিটি লাইনে শুধুমাত্র প্রথম পথ পান

$ sed 's/\(\/[^:]*\).*/\1/g' path.txt
/usr/kbos/bin
/usr/local/sbin
/opt/omni/lbin

উপরের উদাহরণে, \(\/[^:]*\) প্রথম :আসার আগে উপলব্ধ পথের সাথে মেলে। \1 প্রথম মিলিত গ্রুপ প্রতিস্থাপন করে।

উদাহরণ 2:মাল্টিগ্রুপিং

path.txt ফাইলে ফাইলের শেষ লাইনে ক্ষেত্রের ক্রম পরিবর্তন করুন।

$ sed '$s@\([^:]*\):\([^:]*\):\([^:]*\)@\3:\2:\1@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/omni/bin:
/root/bin:/opt/omni/sbin:/opt/omni/lbin

উপরের কমান্ডে $ শুধুমাত্র শেষ লাইনের জন্য প্রতিস্থাপনকে নির্দিষ্ট করে। আউটপুট দেখায় যে শেষ লাইনে পাথের মানগুলির ক্রম বিপরীত করা হয়েছে।

উদাহরণ 3:/etc/passwd ফাইলে ব্যবহারকারীর নামের তালিকা পান

এই sed উদাহরণটি শুধুমাত্র /etc/passwd ফাইল থেকে প্রথম ক্ষেত্রটি প্রদর্শন করে।

$sed 's/\([^:]*\).*/\1/' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

উদাহরণ 4:প্রতিটি শব্দের প্রথম অক্ষর বন্ধনী করুন

এই sed উদাহরণটি প্যারান্থেসিসে প্রতিটি শব্দের প্রথম অক্ষর প্রিন্ট করে।

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff

উদাহরণ 5:সাধারণ সংখ্যা কমিফাই করুন।

সংখ্যা নামক ফাইল তৈরি করা যাক যেখানে সংখ্যার তালিকা আছে। নিচের sed কমান্ডের উদাহরণ হাজার হাজার পর্যন্ত সংখ্যা কমিফাই করতে ব্যবহৃত হয়।

$ cat numbers
1234
12121
3434
123
$sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g' numbers
1,234
12,121
3,434
123

  1. IF কমান্ড... SQL সার্ভারে ELSE

  2. রুবি ফাংশন এবং পদ্ধতি:আপনার নিজের সংজ্ঞায়িত কিভাবে

  3. জাভাতে ArrayIndexOutOfBoundsException কি?

  4. C# এ মানের প্রকার এবং রেফারেন্স প্রকারগুলি ব্যাখ্যা করুন এবং বৈসাদৃশ্য করুন