ফাইল থেকে দুটি নিদর্শনগুলির মধ্যে সামগ্রী কীভাবে প্রতিস্থাপন করবেন?


9

আমি ফাইলটির নিম্নলিখিত বিন্যাসটি করেছি:

<common>
fitnes=0
genetic=1
method=0
</common>
<inputs>
foo=bar
bar=foo
</inputs>
<limits>
balance=200.00
</limits>

এবং আমি ডিলিট সবকিছু কি মধ্যে চাই <inputs>এবং </inputs>(ব্যতীত প্যাটার্ন এটি স্ব) এবং অন্য ফাইল (যেমন থেকে বিষয়বস্তু সঙ্গে এটি প্রতিস্থাপন foo.txt)। সঙ্গে অন্য কথায় লাইনে foo=barএবং bar=fooঅন্য কোনো সামগ্রী দিয়ে প্রতিস্থাপিত হবে।

সম্ভবত এটি আপনি একটি মাল্টি-লাইন ম্যাচটি কীভাবে মুছবেন তার অনুরূপ হতে পারে :

:g/<inputs/,/inputs>/d

তবে আমি নিশ্চিত নই যে অন্য কোনও ফাইলের সামগ্রী সন্নিবেশ করানোর জন্য আমার কী প্রতিস্থাপন করা উচিত d, তবে আমি মিলের প্যাটার্নটি রাখতে চাই।

অনুরূপ পদ্ধতির মত html ট্যাগ অভ্যন্তরীণ সামগ্রী মুছে ফেলা হবে

:/<inputs>/norm vitd

তবে আমি জানি না আপনি কীভাবে ফাইলটির সামগ্রীটি এতে যুক্ত করবেন।

আদর্শভাবে আমি একটি লাইনার সন্ধানের চেষ্টা করছি, যেহেতু এটি অন্য স্ক্রিপ্টের অংশ হবে।

আমি কীভাবে এটি অর্জন করতে পারি?

উত্তর:


10

একটি প্রতিস্থাপনের ব্যবহার এরূপ মত প্রকাশের ফলাফলের সাথে কোনও প্যাটার্নটি প্রতিস্থাপন করতে ব্যবহার করা যেতে পারে:

:keeppatterns %s;<inputs>\zs\_.\{-}\ze</inputs>;\=insert(readfile('test.txt'), '')

দেখা :help sub-replace-expression

নোটটি অনুসন্ধানের ইতিহাসে কোনও কিছু যুক্ত করতে কমান্ডকে keeppatternsবাধা দেয় substituteএবং "শেষ সন্ধানের প্যাটার্ন রেজিস্ট্রার" সংরক্ষণ করে - দেখুন :help "/। এটা তোলে অকারণে কমান্ড সংশোধনকারীদের সঙ্গে তেজ এর বিশ্বব্যাপী রাষ্ট্র পরিবর্তন থেকে স্ক্রিপ্ট প্রতিরোধ ভাল অভ্যাস keepalt, keepjumps, lockmarks, keepmarks, এবং keeppatterns


5

গ্যারি থেকে তার বিকল্প বিকল্পটি হ'ল:

:g/^<inputs>/+,/^<\/inputs>/-d|-r dummy

:rফাইল ডামি থেকে ডেটা পড়ার জন্য কমান্ডটি ব্যবহার করার চেয়ে প্রথমে প্রদত্ত প্যাটার্নে সমস্ত কিছু মুছে ফেলা হয় । এখন যদি আপনার <input>/</input>প্যাটার্নের মধ্যবর্তী লাইনগুলি থেকে ফাইলের নাম বের করার প্রয়োজন হয় তবে এটি লিটলটিকে আরও জটিল করে তুলবে।


4

এটি কাজ করে বলে মনে হচ্ছে, কমপক্ষে একটি ইউনিক্স সিস্টেমে:

:/<inputs>/+1,/<\/inputs>/-1!cat foo.txt

এটি ব্যবহার করে {range}!{filter}একের পর এক থেকে লাইন ফিল্টার করতে কমান্ড <inputs>সামনে এক </inputs>বহিরাগত প্রোগ্রামের মাধ্যমে cat foo.txt। এই ক্ষেত্রে, catএর স্ট্যান্ডার্ড ইনপুট উপেক্ষা করে, তাই মূল লাইনগুলি মুছে ফেলা হয় এবং ফাইলের বিষয়বস্তু দ্বারা প্রতিস্থাপন করা হয় foo.txt

দেখা:

:help :range!
:help cmdline-ranges

2

আমি মনে করি একটি ম্যাক্রো একটি সহজ পদ্ধতির হবে। বিশেষত, আপনার যদি একই কাজ করার বিভিন্ন জায়গা থাকে।

  1. কেবল সেই 2 টি ফাইল খোলা রাখুন।
  2. এখন প্রথম ফাইলটিতে রেকর্ডিং শুরু করুন qa,( aরেকর্ডের নাম)।
  3. শুরু প্যাটার্ন, প্রেস জন্য অনুসন্ধান করুন নিচে , তারপর প্রেস Ctrl- v, শেষ প্যাটার্ন অনুসন্ধান প্রেস আপ । এখন আপনি যে অংশটি মুছতে চান তা নির্বাচন করা হয়েছে। মুছে ফেল.
  4. ma( aচিহ্নের নাম) ব্যবহার করে অবস্থানটি চিহ্নিত করুন এবং ফাইলটি সংরক্ষণ করুন।
  5. :b2কমান্ড দ্বারা 2 য় ফাইলে যান এবং একইভাবে আপনার শুরু / শেষের মানদণ্ড অনুযায়ী অংশটি নির্বাচন করুন।
  6. এই aপয়েন্টে যেতে এই ফাইল টিপুন ফিরে । সেখানে পেস্ট করুন p
  7. আবার শেষের মাপদণ্ড অনুসন্ধান করুন এবং আবার আঘাত না করার জন্য বিভাগটি অতিক্রম করুন।
  8. টিপে পুনর্নির্মাণ প্রস্থান করুন q
  9. দ্বারা সংখ্যার পুনরাবৃত্তি 40@a

1
পরামর্শের জন্য ধন্যবাদ, এটি ঠিক আছে, তবে এটি এই বিশেষ ক্ষেত্রে সহায়তা করবে না, যেহেতু আমি exস্ক্রিপ্টের অংশ হিসাবে অ-ইন্টারেক্টিভ সমাধানের সন্ধান করছি যেখানে আমি ব্যবহারকারী ইনপুট আর্গুমেন্টের উপর নির্ভর করে কোন ফাইলটি সন্নিবেশ করতে হবে তা নির্দিষ্ট করতে পারি।
কেনারব

1

এটি যদি এক্স-এক্সএমএল সরঞ্জামগুলির সাহায্যে এক্সএমএলকে বিশ্লেষণের আরেকটি প্রচেষ্টা হয়, তবে করবেন না।

এখানে সমাধানগুলি বৈধ, তবে উদ্দেশ্যটি নাও হতে পারে। যদি এক্সএমএল কোনও ভাল প্রশিক্ষিত উত্স থেকে না আসে, আপনি ট্যাগে পলায়ন, সিডিএটিএ বা সাদা স্পেস পেতে পারেন!

সুতরাং এক্স কমান্ড থেকে vi কমান্ড এর সাথে ডিল করতে পারে।


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