প্রচুর খালি লাইন সহ আমার একটি ডকুমেন্ট আছে।
2 বা ততোধিক একসাথে থাকাকালীন আমি কীভাবে এগুলি সরিয়ে ফেলতে পারি।
আমি sed "s/\n\n//"ফাইল চেষ্টা করেছিলাম কিন্তু এটি কার্যকর হয়নি। কোনও ত্রুটি নেই।
প্রচুর খালি লাইন সহ আমার একটি ডকুমেন্ট আছে।
2 বা ততোধিক একসাথে থাকাকালীন আমি কীভাবে এগুলি সরিয়ে ফেলতে পারি।
আমি sed "s/\n\n//"ফাইল চেষ্টা করেছিলাম কিন্তু এটি কার্যকর হয়নি। কোনও ত্রুটি নেই।
উত্তর:
খালি লাইনগুলি সরাতে:
sed '/^$/d'
sedলাইন ভিত্তিক, সুতরাং "2 বা আরও একটি নির্দিষ্ট বাইটের আরও বেশি" বিবেচনা করে সেই বাইটটি যখন নতুন লাইন হয় তখন বাদ দিয়ে কাজ করে । তারপরে আপনাকে এমন কিছু চিন্তা করতে হবে যা পুরো লাইনের জন্য কাজ করে।
sedতার "প্যাটার্ন স্পেস" / "হোল্ড স্পেস" বৈশিষ্ট্যটির মাধ্যমে বেশ কয়েকটি লাইন পরিচালনা করতে সক্ষম। তবে আমি মনে করি এটি খুব জটিল। ;-)
1!(লাইন 1 ছাড়া সমস্ত মেলে), এইভাবে: sed '1!{/^$/d'}।
sed। একটি ফাইল তৈরি করা মূলত একই নামের কোনও বিদ্যমান ফাইল মুছে ফেলবে। sed '/^&/d' file.txt > otherfile.txtকাজ করবে.
দরকার নেই sed। grepকরব:
grep .
(এটি grep, এসপিসি, বিন্দু, এটি কমপক্ষে একটি অক্ষর সমন্বিত কোনও লাইনের সাথে মেলে)।
এছাড়াও আছে:
tr -s '\n'
(নিউলাইন চরিত্রগুলির যে কোনও ক্রমটিকে একের মধ্যে ছড়িয়ে দিন)।
ক্রিস দ্বারা উল্লিখিত হিসাবে, উভয়ই সমতুল্য নয় কারণ খালি লাইনগুলি অপসারণ করা (উপরের প্রথম সমাধানের মতো এবং বেশিরভাগ উত্তরগুলি এখানে ফোকাস করে) যেখানে প্রথম লাইনটি খালি রয়েছে তেমন ক্ষেত্রে অনুরোধ অনুসারে নিউলাইন চরিত্রগুলির সঙ্কোচন অনুক্রমের মতো নয় where প্রথম লাইনটি খালি করতে কেবল একটি শীর্ষস্থানীয় নিউলাইন চরিত্র লাগে ।
ব্রুস এডিগারের উত্তরটি দেখে কাজটির sedএটির জন্য সেরা সরঞ্জাম নয়, যেহেতু এটি লাইন ভিত্তিক এবং লাইন \n-এর শেষের চরিত্র হিসাবে আচরণ করে এটি জটিল হয়ে ওঠে।sedজন্য উপযুক্ত সরঞ্জাম হতে পারে, তবুও, এখানে আরও কিছু বিকল্প রয়েছে:
পার্ল
perl -ne 'print if /./' file.txt
অথবা
perl -pe '$/=""; s/\n+/\n/;' file.txt
@রুখকে ধন্যবাদ যিনি আমাকে যেতে এবং এটি পড়তে বাধ্য করেছেন :
$ /
ইনপুট রেকর্ড পৃথককারী, ডিফল্টরূপে নতুন লাইন। এটি "লাইন" কী তা পার্লের ধারণাকে প্রভাবিত করে। শূন্য পংক্তিতে শূন্য রেখাগুলি টার্মিনেটর হিসাবে চিকিত্সা করা সহ শূন্য রেখাগুলির সাথে শূন্য পংক্তির সাথে শূন্য পংক্তিতে সেট করা (খালি লাইনে কোনও ফাঁকা জায়গা বা ট্যাব থাকতে পারে না) জোর করে আর-এর-এর আরএস ভেরিয়েবলের মতো কাজ করে। আপনি একটি মাল্টি-ক্যারেক্টার টার্মিনেটরের সাথে মেলে একটি মাল্টি-ক্যারেক্টার স্ট্রিং এ সেট করতে পারেন, বা ফাইলের শেষের সাথে পড়তে অপরিশোধিত করতে পারেন। "\ N \ n" এ সেট করা মানে "" এ সেট করার চেয়ে কিছুটা আলাদা ", যদি ফাইলটিতে পরপর খালি লাইন থাকে। "" এ সেট করা দু'বার বা একাধিক ক্রমাগত খালি রেখাকে একক ফাঁকা রেখা হিসাবে বিবেচনা করবে। "\ N \ n" তে সেট করা অন্ধভাবে ধরে নেবে যে পরবর্তী ইনপুট অক্ষরটি নতুন অনুচ্ছেদে হলেও পরবর্তী অনুচ্ছেদের অন্তর্ভুক্ত।
জবুথবু ব্যক্তি / awk
awk '$1' file.txt
এটি পোস্ট করা উদাহরণটির জন্য কাজ করবে তবে @ স্টেফেন চ্যাজেলাস যেমন উল্লেখ করেছেন, এটি এমন লাইনগুলিও মুছে ফেলবে যার প্রথম ক্ষেত্রটি "দেখতে" দেখাচ্ছে 0। এটি আরও দৃust়:
awk NF file.txt
perl -pe 's/\n+/\n/ file.txtকরবেন, ইনপুট রেকর্ড বিভাজক এই ব্যবহারের জন্য অপ্রাসঙ্গিক।
perl -peবা perl -neলাইনে কাজ লাইন। \n+কখনও মিলবে না কারণ এটি কেবলমাত্র একটি লাইনে প্রয়োগ করা হয়। এটা কেন আপনি হয় সেট করতে হবে এর $/বা ব্যবহার -0TI ফাইল পুরো গবগব করে খাওয়া: perl -0pe 's/\n+/\n/' file।
আপনি কি অপসারণ মানে? সদৃশ সরিয়ে ফেলুন (একের কাছে অনেকগুলি ফাঁকা রেখা) বা সমস্ত সরাবেন?
আপনি যদি সদৃশ অপসারণ করতে চান তবে সেড ব্যবহারের পদ্ধতিটি এখানে:
sed '$!N; /^\(.*\)\n\1$/!P; D'
এটি uniqকমান্ড অনুকরণ করে ।
সেরা পছন্দটি ব্যবহার করা হচ্ছে awk:
awk NF <filename>
sedঅংশটি দুর্দান্ত কাজ করে! এটি সেরা উত্তর হিসাবে প্রস্তাব দেওয়া হচ্ছে।
এই উত্তরগুলির বেশিরভাগটির জন্য প্রথমে ট্রেলিং হোয়াইটস্পেস অপসারণ করা দরকার। দ্বিগুণ হয়ে যাওয়া নিউলাইনগুলি সরানো সমস্ত ফাঁকা রেখা সরিয়ে দেয়। (এই সম্পর্কে চিন্তা).
আক্ষরিক অর্থে ব্যাখ্যা করা ওপি "যদি কোনও পুনরাবৃত্তি ফাঁকা লাইন থাকে তবে কোনও ফাইল থেকে সমস্ত ফাঁকা রেখা সরানো" চায়।
সাধারণ ব্যবহারকারী "কেবলমাত্র নকল ফাঁকা লাইনগুলি মুছে ফেলতে" চান।
এটি করার জন্য, প্রথমে হোয়াইটপেসের পিছনে স্ট্রিপ করুন, এবং বিড়াল-টি হলেও পাইপ
sed s/[[:space:]]*$// | cat -s
এবং তবুও এটি কোনও অতিরিক্ত অগ্রণী বা পিছনের ফাঁকা রেখাটি সরিয়ে ফেলবে না।
আপনি যদি খালি লাইনের কোনও প্রদত্ত অনুক্রমের জন্য একটি ফাঁকা রেখা রাখতে চান তবে:
sed -e '/./b' -e :n -e 'N;s/\n$//;tn'
cat -s) যা আমি বুঝতে পেরেছি ঠিক ততই প্রশ্নটি জিজ্ঞাসা করেছিল accomp (এবং এটির চেয়ে ভাল cat -sকারণ আমি এটি ব্যবহার sed -iকরতে পারি))
উভয়কে আপনার ক্ষেত্র বিভাজক হিসাবে sed -e 's#\\n\\n#\\n#g' input.file > output.fileব্যবহার করার চেষ্টা করুন /এবং আপনার রেজেক্সের অংশ সমস্যা হতে পারে।
এই আদেশটি ব্যবহার করুন:
tr -s '\r' '\n'
echo -e 'one\r\n\r\n\r\n\rtwo'| tr -s '\r' '\n'। কমান্ড trসব অনুবাদ করবে \rকরার \nএবং তারপর সব আলিঙ্গন করবে \nমাত্র এক করতে। সুতরাং, এটি কাজ করে, ইউনিক্স নয়, উইন্ডোতে এটি প্রযোজ্য এই বিষয়টি নিয়ে কী করা যায় তা নিশ্চিত নয়।