উত্তর:
নিম্নলিখিত চেষ্টা করুন:
grep -v -e '^$' foo.txt
-e
বিকল্প মিলের জন্য Regex নিদর্শন পারেন।
চারপাশের একক উদ্ধৃতি ^$
এটি শেলের পক্ষে কাজ করে। অন্যান্য শেলগুলি একক বা ডাবল উদ্ধৃতিতে খুশি হবে।
আপডেট: এটি ফাঁকা লাইন বা "সমস্ত সাদা স্থান" (যেমন "\ r \ n" স্টাইল লাইন সমাপ্তিযুক্ত উইন্ডোজ লাইন) সহ একটি ফাইলের জন্য আমার পক্ষে কাজ করে, যেখানে উপরেরগুলি কেবল ফাঁকা রেখা এবং ইউনিক্স স্টাইল লাইন সমাপ্ত ফাইলগুলি সরিয়ে দেয়:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
, এর পরের সমস্ত কিছুকে -e
নিদর্শন হিসাবে ব্যাখ্যা করা হয়।
grep -v -e '^[[:space:]]*$' -e '^#' file
আপনাকে স্ক্রিপ্ট বা কনফিগার ফাইলে (বা মন্তব্যগুলির জন্য হ্যাশ অক্ষর ব্যবহার করে এমন কোনও ফাইল টাইপ) সমস্ত নন-ফাঁকা, নন-মন্তব্য লাইন দেবে।
-e
বিকল্পটি মিলে যাওয়ার জন্য রেজেক্স নিদর্শনগুলিকে মঞ্জুরি দেয়।" এটা খুব বিভ্রান্তিকর । -e
এটির জন্য একটি (POSIX-) সংজ্ঞা: This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).
( ম্যানুয়াল থেকে )। গ্রেপ ইতিমধ্যে একটি (বেসিক) নিয়মিত অভিব্যক্তি ডিফল্টরূপে প্রত্যাশা করে। এই প্যাটার্ন জন্য, আপনি বাদ দিতে পারে -e
সম্পূর্ণরূপে: grep -v '^[[:space:]]*$' foo.txt
।
সহজবোধ্য রাখো.
grep . filename.txt
ব্যবহার করুন:
$ dos2unix file
$ grep -v "^$" file
বা কেবল সহজভাবে
awk 'NF' file
আপনার যদি ডস 2 ইউনিক্স না থাকে তবে আপনি ট্র এর মতো সরঞ্জাম ব্যবহার করতে পারেন :
tr -d '\r' < "$file" > t ; mv t "$file"
awk
।
grep -v "^[[:space:]]*$"
The -v makes it print lines that do not completely match
===Each part explained===
^ match start of line
[[:space:]] match whitespace- spaces, tabs, carriage returns, etc.
* previous match (whitespace) may exist from 0 to infinite times
$ match end of line
কোড চালানো-
$ echo "
> hello
>
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok
এটি কীভাবে / কেন কাজ করে সে সম্পর্কে আরও জানার জন্য, আমি নিয়মিত প্রকাশগুলি পড়ার পরামর্শ দিই। http://www.regular-expressions.info/tutorial.html
আমি ব্যবহার করতে পছন্দ করি egrep
, যদিও ফাঁকা লাইনের সাথে একটি খাঁটি ফাইলের সাথে আমার পরীক্ষায় আপনার পদ্ধতির ভাল কাজ করেছে (যদিও আমার পরীক্ষায় উদ্ধৃতি চিহ্ন ছাড়া)) এটিও কাজ করেছে:
egrep -v "^(\r?\n)?$" filename.txt
আপনার যদি একাধিক ফাঁকা রেখার সারিতে ক্রম থাকে এবং ক্রমানুসারে কেবল একটি ফাঁকা রেখা চান, চেষ্টা করুন
grep -v "unwantedThing" foo.txt | cat -s
cat -s
বারবার খালি আউটপুট লাইন দমন করে।
আপনার আউটপুট থেকে যেতে হবে
match1
match2
প্রতি
match1
match2
মূল আউটপুটে তিনটি ফাঁকা রেখা সংকুচিত বা "ফাঁকা" এক ফাঁকা লাইনে পরিণত হবে।
পূর্ববর্তী উত্তরগুলির মতো:
grep -v -e '^$' foo.txt
এখানে, grep -e
এর বর্ধিত সংস্করণ মানে , grep । '^ $' এর অর্থ ^ (লাইনের শুরু) এবং $ (লাইনের শেষ) এর মধ্যে কোনও অক্ষর নেই। '^' এবং '$' হ'ল রেগেক্স অক্ষর।
সুতরাং কমান্ডটি grep -v
সমস্ত রেখা মুদ্রণ করবে যা এই প্যাটার্নের সাথে মেলে না (^ এবং between এর মধ্যে কোনও অক্ষর নেই)।
এইভাবে, খালি ফাঁকা লাইনগুলি মুছে ফেলা হয়।
-e
"গ্রেপ এর বর্ধিত সংস্করণ" এর অর্থ এই নয়, সম্ভবত আপনি কি বিভ্রান্ত -E
? ম্যানুয়ালটি পরিষ্কারভাবে বলেছে যে -e
কেবল স্পষ্টভাবে বলে যে একটি প্যাটার্ন অনুসরণ করে। যেহেতু প্যাটার্নটি কোনও ড্যাশ দিয়ে শুরু হয় না এবং আপনি কেবল একটি প্যাটার্নটি নির্ধারণ করছেন, তাই আপনি সম্ভবত এটি ছেড়ে দিতে পারেন কারণ ডিফল্ট গ্রেপ একটি রেজেক্স প্যাটার্ন আশা করে: grep -v '^$' foo.txt
(এক্সটেন্ডেড রেজেক্স কার্যকারিতার প্রয়োজন নেই)) এছাড়াও এটি উল্লেখযোগ্য যে এটি ফাইলের ফাঁকা লাইনগুলি সরিয়ে দেয় না, কেবলমাত্র আউটপুট দিয়ে পাইপ করা হয়। এই ক্ষেত্রে, sed -i
সঠিক সরঞ্জাম হবে।
পার্ল ব্যবহার:
perl -ne 'print if /\S/'
\S
মানে খালি অক্ষর মেলে match
egrep -v "^ \ s \ s +"
উদাহরণস্বরূপ ইতোমধ্যে রেগেক্স করেছে, এবং and গুলি সাদা স্থান।
+ + বর্তমান প্যাটার্ন সদৃশ।
^ শুরু করার জন্য
ব্যবহার করুন:
grep pattern filename.txt | uniq
uniq
সংযুক্ত ফাঁকা রেখাগুলি কেবলমাত্র একটি ফাঁকা লাইনে হ্রাস করবে, তবে সেগুলি পুরোপুরি সরিয়ে ফেলবে না। তবুও, আমি এটির মতো ব্যবহার করার চেষ্টা করতে uniq
চাই। প্রথমে বাছাই করা কার্যকরভাবে সমস্ত ফাঁকা লাইন সরিয়ে ফেলবে - কেবল একটি রেখে, তবে লাইন ক্রমটি পুনরায় সাজানো গ্রহণযোগ্য হবে না।
#
সাইন দিয়ে শুরু করা সাদা লাইন এবং লাইনগুলি অপসারণের আরও একটি উপায় এখানে । আমি মনে করি কনফিগারেশন ফাইলগুলি পড়ার জন্য এটি বেশ দরকারী।
[root@localhost ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults requiretty
Defaults !visiblepw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
stack ALL=(ALL) NOPASSWD: ALL
এটি সত্য যে গ্রেপ-ভি-'' $ $ 'এর ব্যবহার কাজ করতে পারে, তবে এটিতে খালি রেখাগুলি সরিয়ে দেয় না যার মধ্যে 1 বা একাধিক স্পেস রয়েছে । ফাঁকা লাইনগুলি সরিয়ে ফেলার জন্য আমি সবচেয়ে সহজ এবং সহজ উত্তরটি পেয়েছি করণীয় ব্যবহার । উপরোক্ত অজানা লোকগুলি থেকে নিম্নলিখিতটি কিছুটা সংশোধিত:
awk 'NF' foo.txt
তবে যেহেতু এই প্রশ্নটি গ্রেপ ব্যবহারের জন্য, আমি নীচের উত্তরগুলি দিতে যাচ্ছি:
grep -v '^ *$' foo.txt
দ্রষ্টব্য : ^ এবং * এর মধ্যে ফাঁকা স্থান।
অথবা আপনি ফাঁকা স্থান উপস্থাপন করতে use গুলি ব্যবহার করতে পারেন:
grep -v '^\s*$' foo.txt