সদৃশ রেখাগুলি "x" দিয়ে শুরু হবে, "x" এর সাথে "y" এর সাথে সদৃশ হবে?


9

নিম্নলিখিত প্যাটার্ন সহ আমার একটি ফাইল রয়েছে:

foo 111
baz
foo 222
baz
foo 333
baz

যা রূপান্তরিত করা প্রয়োজন

foo 111
bar 111
baz
foo 222
bar 222
baz
foo 333
bar 333
baz

সুতরাং, সমস্ত লাইনটি শুরু করে সদৃশ করুন fooএবং কেবল fooনকলটিতে পরিবর্তন করুন তবে বাকী রেখাটি (যা প্রতিটি ক্ষেত্রে পৃথক) অক্ষত রাখুন। এই কিভাবে করবেন?


আপনি যদি একটি রেজিপ্সে জাহান্নামে আবদ্ধ না হন তবে একটি ম্যাক্রো ঠিক ঠিক করবে। এর মতো সাধারণ ক্ষেত্রে সত্যিই বেশি কিছু আসে না, তবে আপনার যদি কিছুটা জটিল জটিল কিছু থাকে তবে এটি একটি খুব কার্যকর বিকল্প valid
ফিলিপফ্র্যাঙ্ক

উত্তর:


19

আপনি এখানে যান:

:g/foo/t.|s//bar

decomposing:

:g/foo/    " start a global command applied on all lines matching 'foo'
t.         " duplicate the current line (the cursor is now on the new line)
|          " chain a new command
s//bar     " substitute the last searched element with 'bar'

কারণ gকমান্ড অনুসন্ধানের প্যাটার্নটি আপডেট করবে, তাই আপনি বিকল্প কমান্ডে প্রতিস্থাপনের প্যাটার্নটি বাদ দিতে পারেন। (রেফার:, :h :gঅনুসন্ধান করুন search pattern)।


পুরানো সংস্করণ:

:g/foo/norm! yyp:s/foo/bar^M

decomposing:

:g            start a global command
/foo/         apply only on lines having 'foo'
norm!         execute a normal command
yyp           duplicate the line
:s//bar       replace foo with bar on the line (the duplicated one)
^M            add enter to execute the substitution

^Mটিপুন Ctrl+vএবং সন্নিবেশ করতে enter

দ্রষ্টব্য : tকমান্ড সম্পর্কে জানার আগে আমি মূলত "পুরানো" সংস্করণ নিয়ে এসেছি । আমি এটি ছেড়ে দেব তবে আমি এটি ব্যবহার করার পরামর্শ দেব না। প্রথমটি আরও পরিষ্কার clean


সমাধান করা হয়েছে, 'সহজ সংস্করণ' পুরোপুরি কাজ করেছে। তবে প্রথম সংস্করণটির ফলস্বরূপ সদৃশ লাইনটি এখনও শুরু হয়েছে foo....
LB7979

অদ্ভুত, ^Mআমার ব্যাখ্যা অনুসারে আপনি কি প্রবেশ করলেন ?
nobe4

আমার খারাপ, ভাল করে পড়েনি। প্রথম সমাধান পাশাপাশি কাজ করে!
LB7979

আপনি কেন জটিল সংস্করণ সহ মোটেও বিরক্ত হন তা আমি জানি না। সহজ সংস্করণটি হ'ল ... সহজ। ;) (পসিক্স অনুগত হওয়ার কথা উল্লেখ করা হয়নি)) কেন এটি প্রথমে রাখবেন না?
ওয়াইল্ডকার্ড

1
প্রাথমিকভাবে আমি প্রথম সংস্করণটি নিয়ে এসেছি, যা আমার কাছে আরও স্বাভাবিক ছিল, কারণ সেই সময়টি সম্পর্কে আমি সচেতন ছিলাম না tএবং পরে আমি দ্বিতীয়টি যুক্ত করেছিলাম। আমি অর্ডার পরিবর্তন করব, আপনি ঠিক বলেছেন। প্রথমটি পসিক্স সম্পর্কে কীভাবে?
nobe4

1

আমি এই সময়ে সবসময় স্টাফ করি এবং ঠিক এর মতো কিছু %s/^foo \(.*\)/foo \1\rbar \1/করি (আংশিক কারণ আমি একই সাথে অনেকগুলি একই রকম কাজও করি যা একটি অনুলিপি ফাংশন ব্যবহার করে চালাক কিছুতে পরিণত করা যায় না, এবং \(.*\)এখনই আমার পেশী স্মৃতির অংশ)।

আমি সন্দেহ করি যে এটি পসিক্স-অনুবর্তী নয় (এটি অন্যান্য vi ক্লোনগুলির সাথে কাজ করে না), তবে ^M( C-VReturn) পরিবর্তে ব্যবহার করে \rঅন্যান্য বেশিরভাগ ভিও ক্লোনগুলিতে কাজ করে বলে মনে হচ্ছে।

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