আমি কীভাবে ভিন্নতা থেকে একটি সেড কমান্ড লাইন তৈরি করতে পারি?


0

আমি সচেতন যে diff -eএকটি edস্ক্রিপ্ট আউটপুট করতে পারেন । এবং আমার বোঝার বিষয়টি হ'ল edএবং sedতাদের পদ্ধতির ভাগ করে নিন তবে এটি edইন্টারেক্টিভ এবং sedপ্রবাহের জন্য।

আমি যা করতে চাই তা হ'ল আউটপুটটি diff -e(বা অন্য কোনও diffঅনুরোধের) গ্রহণ করা এবং এটিকে একটি অনুরোধে পরিণত করা sedযে ইনপুট হিসাবে মূল "পূর্বে" ফাইলটির সাথে সেই আদেশটিকে অনুরোধ করা ইনপুট থেকে "পরে" ফাইলের সমান আউটপুট উত্পাদন করে diffআবাহন। আমি অন্য ফাইলটিতে এডি / সেড স্ক্রিপ্টটি লিখতে না পেরে -e <BLERG>বিকল্পগুলির সংগ্রহ হিসাবে কমান্ডটি ফর্ম্যাট করতে চাই sed

আমি একগুচ্ছ স্পষ্ট মুগিং চেষ্টা করেছি, তবে আমি পছন্দসই (বা যুক্তিসঙ্গত চেহারা) আউটপুট পাচ্ছি না এবং আমি মনে করি যে আমি কিছু অতিরিক্ত জিনিস মিস করছি। এটা কি সম্ভব?


এটা কি আছে sed?
পল

আমি মনে করি না, এটি হতে হবে না।
আইপিএমসিসি

কিন্তু আমি, একটি স্ট্রিমিং প্রেক্ষাপটে এটা ব্যবহার করতে চান চাও curl -s http://someurl.com | [Command I'm looking for] > outputFileতাই sedপ্রাকৃতিক পছন্দ মত মনে হয়।
ipmcc

উত্তর:


4

আপনি এডিটির সাথে লেগে থাকতে পারেন: ধরে নিচ্ছেন যে আপনি ফাইল 1 এবং ফাইল 2 আলাদা করতে চান, এবং তারপরে ফাইল 1 এ পরিবর্তনগুলি প্রয়োগ করুন এবং ফাইল1.b নামের একটি ফাইলটিতে লিখুন:

{ diff -e file1 file2; echo "w file1.b"; echo q; } | ed file1

এখন, ফাইল 2 এবং file1.b এর মধ্যে কোনও পার্থক্য থাকা উচিত নয়:

$ diff file2 file1.b && echo "no diff"
no diff

আমি মনে করি আপনি সঠিক পথে আছেন তবে এই সমাধানের সাথে সমস্যাটি এটি ফাইল 2 এর অস্তিত্বকে অনুমান করে। আমি যে পরিস্থিতিতে আছি তা হ'ল ফাইল 1 সর্বদা উপলব্ধ। আমি ফাইল 1-তে কিছু হ্যান্ড-এডিটিং করে ফাইল 2 তৈরি করি, তবে ফাইল 2 পর্যায়ক্রমে আমার অধীনে থেকে মুছে ফেলা হয়, সুতরাং অবজেক্টটি হ'ল cat file1 | [Command I'm looking for] > file2ইচ্ছামত ফাইল 2 পুনরায় তৈরি করতে পারে এমন একটি কমান্ড পাইপলাইন তৈরি করা ।
ipmcc

@ipmcc - আপনার ফাইল 2 দরকার নেই; যদি আপনার স্ক্রিপ্টটি cat scriptপরিবর্তনের পরিবর্তে স্ক্রিপ্ট ব্যবহার করে থাকে diff... বা আপনার স্ক্রিপ্টটিকে একটি হেরডোকটিতে এম্বেড করে থাকে এবং ed -s file1<<...সত্যই এটি পাস করে তবে আপনার প্রশ্নের কোনও অর্থ হয় না। দ্বারা ব্যবহৃত অ্যালগরিদম diff -eসত্যিই বোবা। যদি আপনার "ফু" এর দশটি উপস্থিতিগুলি প্রতিস্থাপন করতে হয় যা 40 বারের উপর "বার" দিয়ে বিভক্ত হয় তবে এটি 40 লাইনের একটি ব্লক মুছে ফেলবে এবং সরল না করে 40 লাইনের একটি নতুন ব্লক যুক্ত করবে 15,55s/foo/bar/g। এবং আপনি যদি এটির সাথে কাজ করার চেষ্টা করে থাকেন তবে নিজের রূপটি লেখার চেয়ে sedআপনি এটি রূপান্তর করতে আরও বেশি সময় ব্যয় করবেন (কারণ edপিছনের দিকে পরিচালিত হয়)।
don_crissti

1

diffএবং পরবর্তী আবেদন diffপার্থক্য বিভিন্ন সময়ে হয়। সুতরাং ধরে diffনিলাম আপনার থেকে আউটপুট আছে , আমি এটি ব্যবহার করব patch:

diff -u original.html new.html> original.patch

তারপরে প্রাপ্তি শেষে:

curl -s http://someurl.com > original.html; patch < original.patch

এর অর্থ এই নয় যে আপনার ফাইলের নামগুলি প্যাচ ফাইলে অন্তর্ভুক্ত থাকায় একই রকম হবে engineering

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