আমি সেড ব্যবহার করে খালি লাইনগুলি মুছে ফেলার চেষ্টা করছি:
sed '/^$/d'
তবে এর সাথে আমার ভাগ্য নেই।
উদাহরণস্বরূপ, আমার এই লাইনগুলি রয়েছে:
xxxxxx
yyyyyy
zzzzzz
এবং আমি এটির মতো হতে চাই:
xxxxxx
yyyyyy
zzzzzz
এর জন্য কোডটি কী হওয়া উচিত?
আমি সেড ব্যবহার করে খালি লাইনগুলি মুছে ফেলার চেষ্টা করছি:
sed '/^$/d'
তবে এর সাথে আমার ভাগ্য নেই।
উদাহরণস্বরূপ, আমার এই লাইনগুলি রয়েছে:
xxxxxx
yyyyyy
zzzzzz
এবং আমি এটির মতো হতে চাই:
xxxxxx
yyyyyy
zzzzzz
এর জন্য কোডটি কী হওয়া উচিত?
উত্তর:
আপনার "খালি" লাইনে আপনার ফাঁকা জায়গা বা ট্যাব থাকতে পারে। ব্যবহারের POSIX শ্রেণীর সঙ্গে sedকেবল সাদা ব্যবধান ধারণকারী সব লাইন মুছে ফেলার জন্য:
sed '/^[[:space:]]*$/d'
একটি সংক্ষিপ্ত সংস্করণ যা পূর্ব ব্যবহার করে, উদাহরণস্বরূপ গনু সেড সহ:
sed -r '/^\s*$/d'
(দ্রষ্টব্য যে সেড পিসিআরই সমর্থন করে না ))
-r
sed -i "" '/^[[:space:]]*$/d' <filename>,
^\s*$সমস্ত "খালি" রেখাগুলির সাথে মিলবে, এখানে খালি মানে, লাইনে কোনও অক্ষর নেই, বা লাইনে কেবল খালি স্ট্রিং রয়েছে (উদাহরণস্বরূপ স্পেস)। dকমান্ডের সাহায্যে সমস্ত মিলিত লাইনগুলি সেড দ্বারা সরানো হবে ।
আমি awkসমাধানটি মিস করছি :
awk 'NF' file
যা ফিরে আসবে:
xxxxxx
yyyyyy
zzzzzz
কিভাবে কাজ করে? যেহেতু NF"ক্ষেত্রের সংখ্যা" এর অর্থ দাঁড়ায়, সেই রেখাগুলি খালি থাকায় 0 টি ফাইডল থাকে, যাতে জনসমাফিক 0 থেকে মিথ্যা পর্যন্ত মূল্যায়ন করে এবং কোনও লাইন মুদ্রিত হয় না; তবে, যদি কমপক্ষে একটি ক্ষেত্র থাকে তবে মূল্যায়নটি সত্য এবং awkএর ডিফল্ট ক্রিয়া সম্পাদন করে: বর্তমান লাইনটি মুদ্রণ করুন।
$ time (topic companies <data.tpx | awk 'NF' - | awk -f dialog_menu.awk -) real 0m0.006s user 0m0.000s sys 0m0.008s $ time (topic companies <data.tpx | gsed '/^\s*$/d' | awk -f dialog_menu.awk -) real 0m0.014s user 0m0.002s sys 0m0.006s এটিকে কোনও উদ্রেক স্ক্রিপ্টের মধ্যে যেমন অন্তর্নিহিত করার কোনও নিফটি উপায় সম্পর্কে আপনি কি জানেন? awk '/ মাইপাটার / stuff কর স্টাফ ... B'
awk 'NF {do stuff...}'।
sed '/^$/d'ভাল থাকতে হবে, আপনি কি জায়গায় জায়গায় ফাইলটি পরিবর্তন করার আশা করছেন? যদি তাই হয় তবে আপনার -iপতাকাটি ব্যবহার করা উচিত ।
হতে পারে সেই লাইনগুলি খালি নয়, সুতরাং যদি এটি হয় তবে এই প্রশ্নটি দেখুন টেক্সটফাইলগুলি থেকে খালি লাইনগুলি সরিয়ে ফেলুন, লাইনের শুরু এবং শেষের দিক থেকে ফাঁকা স্থান সরিয়ে ফেলুন আমি বিশ্বাস করি আপনি এটি অর্জন করার চেষ্টা করছেন।
sed -i '/^$/d'এটি করার একটি উপায়।
[]উচিত না , একটি বন্ধনী এক্সপ্রেশনে পলান করা যাতে কোড এখানে সঠিক নয় \[\[:space:\]\]বা \[ \t\]- হওয়া উচিত [[:space:]]এবং [ \t]।
আমি বিশ্বাস করি এটি সবচেয়ে সহজ এবং দ্রুততম:
cat file.txt | grep .
আপনার যদি সমস্ত সাদা-স্পেস লাইনের পাশাপাশি উপেক্ষা করার প্রয়োজন হয় তবে এটি চেষ্টা করুন:
cat file.txt | grep '\S'
উদাহরণ:
s="\
\
a\
b\
\
Below is TAB:\
\
Below is space:\
\
c\
\
"; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -l
আউটপুট
7
5
cat, grepপাশাপাশি ফাইলগুলিও নেয়:grep . file.txt
grep '\S'অবশ্যই পোর্টেবল নয়। আপনার যদি থাকে grep -Pতবে আপনি এটি ব্যবহার করতে পারেন grep -P '\S'তবে এটি সমস্ত প্ল্যাটফর্মগুলিতে সমর্থিত নয়।
grep .অন্যান্য সমাধানগুলির সাথে তুলনার নেতিবাচক দিকটি হ'ল এটি সমস্ত লেখাকে লাল রঙে হাইলাইট করবে। অন্যান্য সমাধানগুলি মূল রঙগুলি সংরক্ষণ করতে পারে। তুলনা unbuffer apt search foo | grep .করুনunbuffer apt search foo | grep -v ^$
এখানে গৃহীত উত্তর এবং উপরে গৃহীত উত্তরগুলির সাহায্যে আমি ব্যবহার করেছি:
$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
`/^\s*$/d` => delete lines which may contain white space
এটি সমস্ত ঘাঁটিগুলি কভার করে এবং আমার প্রয়োজনের জন্য নিখুঁতভাবে কাজ করে। মূল পোস্টারগুলিতে কুতোস @ কেন্ট এবং @ কেভ
এটি পাশাপাশি কাজ করে।
awk '!/^$/' file
xxxxxx
yyyyyy
zzzzzz
আপনি সম্ভবত অপ্রত্যাশিত আচরণটি দেখছেন কারণ আপনার পাঠ্য ফাইলটি উইন্ডোজে তৈরি হয়েছিল, সুতরাং লাইন ক্রমের শেষ \r\n। চালা বা চালানোর আগে আপনি ইউনিক্স স্টাইলের টেক্সট ফাইলে রূপান্তর করতে ডস 2 ইউনিক্স ব্যবহার করতে পারেন
sed -r "/^\r?$/d"
গাড়ি চালানো আছে কিনা তা ফাঁকা লাইনগুলি সরাতে।
-rপতাকা কী করছে এবং -iফাইলটি সরাসরি সংশোধন করতে এবং স্ক্রিনে মুদ্রণ এড়াতে এটির সাথে একত্রিত করা সম্ভব ? sed -r "/^\r$/d"
আরেকটি বিকল্প ছাড়া sed, awk, perl, ইত্যাদি
strings $file > $output
স্ট্রিংস - ফাইলগুলিতে মুদ্রণযোগ্য অক্ষরের স্ট্রিং মুদ্রণ করুন।
stringsপরিবর্তে মানে string?
আমার-নির্দিষ্ট bashউত্তরটি হ'ল এর জন্য perlবিশ্বব্যাপী প্যাটার্ন gপতাকা সহ সাবস্টিটিউশন অপারেটরটি ব্যবহার করার পরামর্শ দেওয়া হল :
$ perl -pe s'/^\n|^[\ ]*\n//g' $file
xxxxxx
yyyyyy
zzzzzz
এই উত্তরটি খালি রেখাগুলিতে তাদের ( [\ ]*) ফাঁকা স্থান রয়েছে কিনা তা হিসাবরক্ষণের পাশাপাশি |একাধিক অনুসন্ধানের পদ / ক্ষেত্রগুলি পৃথক করতে ব্যবহার করে । ম্যাকোস হাই সিয়েরা এবং সেন্টস 6/7-তে পরীক্ষিত।
অবগতির জন্য, ওপি মূল কোড sed '/^$/d' $fileমাত্র কাজ করে জরিমানা bashএকটি উচ্চ ক্ষমতা সম্পন্ন সুপারকম্পিউটিং ক্লাস্টার এ MacOS উচ্চ সিয়েরা এবং সেন্টওএস 6/7 লিনাক্স টার্মিনাল।
আমার জন্য FreeBSD 'র 10.1 সঙ্গে sed কাজ শুধুমাত্র এই সমাধান:
sed -e '/^[ ]*$/d' "testfile"
ভিতরে []স্পেস এবং ট্যাব চিহ্ন রয়েছে।
পরীক্ষার ফাইলটিতে রয়েছে:
fffffff next 1 tabline ffffffffffff
ffffffff next 1 Space line ffffffffffff
ffffffff empty 1 lines ffffffffffff
============ EOF =============