কীভাবে কেবলমাত্র টার্মিনাল ব্যবহার করে কোনও ফাইল সম্পাদনা করবেন?


13

আমি শেল স্ক্রিপ্টটি লিখতে চাই যার মাধ্যমে আমি কমান্ড থেকে ফাইলটি পড়তে পারি এবং ম্যানুয়াল হস্তক্ষেপ ছাড়াই ফাইলটি সম্পাদনা করতে পারি (কিছু পাঠ্য সন্ধান করা এবং এটির পরিবর্তে অন্যটির পরিবর্তে))

এর জন্য আমার কোনও পাঠ্য সম্পাদক ব্যবহার করার দরকার নেই .... কেবল পাঠ্য-অনুসন্ধান (গ্রেপ ব্যবহারের মতো) এবং তারপরে এটি অন্য কোনও পাঠ্যের সাথে প্রতিস্থাপন করা এবং পরিবর্তনগুলি সংরক্ষণ করা ....

উত্তর:


10

এখানেই sedখেলতে আসে। একটি sedকমান্ডের এই বিন্যাসটি রয়েছে:

[pattern1][,pattern2][!] command [args]

এটি regexes ব্যবহার করে তাই এটি / কিছুটা কঠিন হতে পারে। নীচের ২ য় লিঙ্ক থেকে নেওয়া কিছু প্রাথমিক উদাহরণ:

# প্রতি লাইনে "বার" দিয়ে "foo" বিকল্প করুন (সন্ধান করুন এবং প্রতিস্থাপন করুন)
's / foo / bar /' # কেবল একটি লাইনে 1 ম উদাহরণকে প্রতিস্থাপন করে
সেড 's / foo / বার / 4' # শুধুমাত্র একটি লাইনে চতুর্থ দৃষ্টান্ত প্রতিস্থাপন করে
's / foo / bar / g' # একটি লাইনে সমস্ত উদাহরণ প্রতিস্থাপন করে
's / \ (। * \) foo \ (। * foo \) / bar 1bar \ 2 /' # পরবর্তী-থেকে-শেষ কেস প্রতিস্থাপন করুন
sed 's / \ (। * \) foo / \ 1bar /' # কেবলমাত্র সর্বশেষ কেস প্রতিস্থাপন করবে

# বাজ "যুক্ত লাইনের জন্য কেবল" বার "এর সাথে" ফু "বিকল্প করুন
সেড '/ বাজ / এস / ফু / বার / জি'

# বাজ "রয়েছে এমন রেখাগুলির জন্য # বার" EXCEPT "সহ" foo "বিকল্প করুন
সেড '/ বাজ /! এস / ফু / বার / জি'

# "স্কারলেট" বা "রুবি" বা "পুস" থেকে "লাল" করুন
সেডের / স্কারলেট / লাল / জি; এস / রুবি / লাল / জি; এস / পিউস / লাল / জি '# সর্বাধিক সেড
gsed 's / redlet \ | ruby ​​\ | puce / red / g' # GNU sed শুধুমাত্র

কিছু রেফারেন্স


7

খুব দেরিতে উত্তর। তবে এটি অন্যদেরকে অনুরূপ সমস্যা / প্রশ্নে সহায়তা করতে পারে।

আমি একটি প্যাচ তৈরি এবং প্রয়োগ করার পরামর্শ দেব। একটি সুন্দর উদাহরণ এখানে পাওয়া যাবে

উদাহরণস্বরূপ, ধরে নিই যে একটি new.txt ফাইলটিতে এমন পরিবর্তন রয়েছে যা আপনি old.txt এ প্রয়োগ করতে চান। আপনি একটি টার্মিনালে বা একটি patch_file.sh তৈরি এবং সম্পাদন করে কমান্ডগুলি সম্পাদন করতে পারেন।

কমান্ড লাইন: একটি টার্মিনাল খুলুন এবং নীচের লাইনগুলি অনুলিপি করুন এবং চালিত করুন (ফাইলের নাম প্রয়োজনীয় হিসাবে পরিবর্তন করুন):

diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch

স্ক্রিপ্ট: একটি .sh ফাইল পদ্ধতির ব্যবহার। একটি টার্মিনালে (কীবোর্ড: ctrl + Alt + t: gedit patch_file.sh

টার্মিনালে যাবার জন্য আদেশগুলি অনুলিপি এবং পেস্ট করুন নীচে প্রদর্শিত (gedit) হিসাবে .sh ফাইল এবং শিরোনাম নীচে।

#!/bin/sh
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch

স্ক্রিপ্টটি কার্যকর (টার্মিনাল) করুন:

chmod +x patch_file.sh

স্ক্রিপ্ট চালাও (টার্মিনাল):

./patch_file.sh # may require sudo access depending on the directory affected

মাঝারি থেকে ভারী বা জটিল পরিবর্তনের জন্য +1 প্যাচ সর্বদা সরল পথ। আমি জানি না কেন কেউ কেউ রেজেক্স সরঞ্জাম ব্যবহার করে প্রতিটি জিনিস করার চেষ্টা করে।
user.dz

রিভার্স ইঞ্জিনিয়ারিংয়ের চেয়ে আরও বেশি 1 + এমন একটি রেজেনেক্স যা আপনার পরীক্ষা করা ফাইলটিতে আপনি যে পরিবর্তনটি চান তা প্রয়োগ করে বলে মনে হয় ... তবে সেই ফাইলের অন্যান্য উদাহরণগুলিতে প্রয়োগ করার সাথে কখনও কখনও অন্যান্য প্রভাবও পড়ে।
bigjosh

যদি আমি নির্দিষ্ট পাঠ্য স্ট্রিংয়ের সমস্ত উদাহরণ প্রতিস্থাপন করতে চাই, অর্থাত্ "_" দিয়ে সমস্ত "" "," "এর সাথে" বিয়োগ "এবং সমস্ত" gb | <string_of_numbers> | ARO: "এর সাথে প্রতিস্থাপন করতে চাইলে কি কোনও প্যাচটি বোঝায়? Aro: " ধন্যবাদ।
জোশ

1

আপনি যদি কোনও ফাইল সম্পাদনা করতে চান তবে একটি ফাইল সম্পাদক ব্যবহার করুন, সেখানে কমান্ড ভিত্তিক ফাইল সম্পাদক রয়েছে যা স্ক্রিপ্ট থেকে যেমন প্রাক্তন বা এড ব্যবহার করা যেতে পারে ।


1

আপনি সেড বা অজানা খুঁজছেন। আমি আরও শক্তিশালী হতে আরও সহজ এবং বিশ্রী বলে মনে করি।

এখানে অন্য একটি প্রশ্ন থেকে একটি উদাহরণ ।

sed -i 's/gedit.desktop/yournew.desktop/g' /usr/share/applications/defaults.list

এর অর্থ:

  • ফাইল অনুসন্ধান করুন /usr/share/applications/defaults.list
  • এই /, grep gedit.desktop
  • প্রতিস্থাপন yournew.desktop
  • জায়গায় পরিবর্তনগুলি প্রয়োগ করুন -i

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