একাধিক ফাঁকা রেখাকে ভিএম / সেডে একক ফাঁকা লাইনের পরিবর্তে


42

কমবেশি প্রশ্ন সব বলে। আমি সচেতন যে /^$/dসমস্ত ফাঁকা রেখা মুছে ফেলবে, তবে 'একা ফাঁকা রেখায় দুটি বা আরও ফাঁকা রেখা প্রতিস্থাপন করুন' কীভাবে বলতে হয় তা আমি দেখতে পাচ্ছি না

কোন ধারনা?

উত্তর:


48

আপনি যদি অন্য কোনও ব্যবহারের জন্য ভিআইএম বা সেড গুলি চালাচ্ছেন না, তবে বিড়ালের কাছে একাধিক ফাঁকা লাইন ভেঙে দেওয়ার সহজ উপায় রয়েছে, কেবল ব্যবহার করুন cat -s

আপনি যদি ইতিমধ্যে ভিমে ছিলেন এবং সেখানে থাকতে চান, আপনি অভ্যন্তরীণ অনুসন্ধানের মাধ্যমে এটি করতে পারেন এবং জারি করে প্রতিস্থাপন করতে পারেন: :%s!\n\n\n\+!^M^M!g(The এম একটি নতুন লাইনের ভিজ্যুয়াল প্রতিনিধিত্ব, আপনি Ctrl+ টিপে এটি প্রবেশ করতে পারেন vEnter), বা নিজেকে সংরক্ষণ করুন শুধু বিড়াল বের shelling দ্বারা টাইপিং: :%!cat -s


বাহ, -sবিড়ালের বিকল্প জানত না - কেবল একটি .তিহাসিক নোট, এটি পসিক্সে নেই, তবে মনে হয় বিএসডি এবং জিএনইউ বিড়ালে পাওয়া যাবে।
ম্যাক্সচলেপজিগ

2
এর জন্য 'বিজয়ী' হিসাবে চিহ্নিত করা হচ্ছে :%!cat -s। প্রতিদিন জিএনও নতুন কিছু শিখুন!
অ্যান্ড্রু বলস্টার

3
আমি মনে করি আপনি এম এম এর পরিবর্তে \ r ব্যবহার করতে পারেন:%s!\n\n\n\+!\r\r!g
নিকো বেলিক

আমার আজকের এই দরকার ছিল। ধন্যবাদ, কালেব! :)
ডেভিড

19

\nঅনুসন্ধান প্যাটার্নে একটি নতুন লাইন নির্দেশ করতে ব্যবহার করুন । ব্যবহারের Ctrl+ + Mপ্রতিস্থাপন পাঠ্য, অথবা একটি backreference হবে। দেখুন :help patternএবং :help sub-replace-special(এর সাথে সংযুক্ত :help :s)।

%s/\(\n\n\)\n\+/\1/

আপনি দয়া করে ব্যাখ্যা করতে পারেন কীভাবে অনুসন্ধানের ধরণটি হয়?
সাগর জৈন

@ এসজেএমপি প্রয়োজনীয়তা: দুটি বা আরও বেশি ফাঁকা রেখা একটি একক ফাঁকা লাইনের সাথে প্রতিস্থাপন করুন। বাস্তবায়ন: মাত্র দুটি নিউলাইন দিয়ে তিন বা ততোধিক টানা নিউলাইনগুলি প্রতিস্থাপন করুন। কমান্ডটিতে ব্যবহৃত কনস্ট্রাক্টসগুলির ব্যাখ্যার জন্য ম্যানুয়ালটি দেখুন।
গিলস 'অশুভ হওয়া বন্ধ করুন'

তবে কেন কোনও গ্রুপের বিষয়বস্তুগুলি স্থির হয়ে গেলে আপনার ব্যবহারের প্রয়োজন হবে?
সাবুনকু

@ সাবুনকু আপনার একটি গ্রুপ ব্যবহার করার দরকার নেই। তবে কেন একটি গ্রুপ ব্যবহার করবেন না? এখানে, আমি একটি গোষ্ঠী ব্যবহার করেছি কারণ আপনি প্রতিস্থাপন পাঠ্যে একটি নতুন লাইন দিয়ে একটি কমান্ড অনুলিপি করতে পারবেন না: আপনাকে আক্ষরিক Ctrl + M অক্ষর সন্নিবেশ \nকরাতে হবে, প্রতিস্থাপন পাঠ্যে কাজ করে না।
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

এখন আমি বুঝতে পেরেছি, উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ।
সাবুনকু

6

যদি ভিমে থাকে তবে কেবল এটি করুন:

:%!cat -s

2
এটি manপৃষ্ঠা থেকে কেবল একটি উদ্ধৃতি হলেও, এটি কীভাবে কাজ করে তার চারপাশে আপনি কিছুটা বিশদ যুক্ত করতে চাইবেন ।
জেসনওয়ারিয়ান

উইন্ডোজ 7
হয়নি

0

পার্ল ব্যবহার:

perl -00 -pe ''

-00 কমান্ড লাইন বিকল্প অনুচ্ছেদে স্লুর্প মোড চালু করে, যার অর্থ পার্ল অনুচ্ছেদে পাঠ্য অনুচ্ছেদে পাঠ্য রেখার পরিবর্তে লাইনের পরিবর্তে।


0

সেড সহ (জিএনইউ সেড) ৪.২.২:

sed -r '
  /^\s*$/ { 
    # blank line
:NEXT
    N # append next line to pattern space - if none, autoprint PS and exit
    s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
  }
  # else, autoprint PS and next/exit
' < $MYFILE

-2

আমি জানি এটি নিরীহ কোড, তবে আমি 10 মিনিটেরও কম সময়ে এই সমস্যাটি সমাধান করতে চেয়েছিলাম এবং এটি কার্যকর হয়েছিল

for file in /directory/*
do
  originalname=$file
  us='_'
  tempname=$file$us
  echo $originalname
  mv $originalname $tempname
  uniq $tempname $originalname
  rm $tempname
done

1
uniqসংলগ্ন সমান লাইনগুলি সরিয়ে দেয়। ওপি যা চায় তা নয়।
পাচোলিক

@ পাচোলিক তিনি স্পষ্টভাবে বলেছিলেন "একাধিক ফাঁকা রেখা একক ফাঁকা লাইনের পরিবর্তে" সংলগ্ন সমান লাইন অপসারণ করবেন না !!!
মাহমুদ জাল্ট

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