কোনও ফাইল (ট্যাব এবং স্পেস সহ) ফাঁকা লাইনগুলি কীভাবে সরিয়ে ফেলবেন?


উত্তর:


26

শুধু grepঅ ঐ খালি জন্য:

grep '[^[:blank:]]' < file.in > file.out

[:blank:]অক্ষরের ব্যাপ্তি ( [...]) এর অভ্যন্তরে পসিক্স অক্ষর শ্রেণি বলা হয়। আছে কয়েক মত [:alpha:], [:digit:]... [:blank:]অনুভূমিক সাদা স্থান (POSIX লোকেলে, স্থান এবং ট্যাব UTF8 হওয়া লোকেলে যে, কিন্তু অন্য লোকেলে সব মত, আরো হতে পারে ইউনিকোড অনুভূমিক ব্যবধান অক্ষর) সাথে মিলে যায় যখন [[:space:]]ম্যাচ অনুভূমিক এবং উল্লম্ব সাদা স্থান অক্ষর ( [:blank:]উল্লম্ব ট্যাব, ফর্ম ফিডের মতো প্লাস জিনিসগুলির সমান ...)।

grep '[:blank:]'

লাইন যে অক্ষর কোন কথা থাকতে ফিরে আসবে, :, b, l, a, nবা k। চরিত্রের ক্লাসগুলি কেবলমাত্র এর মধ্যেই স্বীকৃত [...], এবং এর ^মধ্যে [...]সেটটি উপেক্ষা করে। সুতরাং [^[:blank:]]কোনও চরিত্র মানে ফাঁকা বর্ণগুলি।


1
$লাইনের শেষের জন্যও কি কোনও হওয়া উচিত ?
— মাইকেল ডুরান্ট


1
@MichaelDurrant। [^[:blank:]]$কেবলমাত্র এমন লাইনগুলি মেলে যা শেষ হয় না। আমরা এমন লাইনগুলি চাই যেখানে কোথাও
— স্টাফেন চেজেলাস

@ স্টাফেন চ্যাজেলাস আমি গ্রেপ চেষ্টা করেছি [: ফাঁকা:] উত্স: ফাইল এমনকি এই আদেশটি কাজ করছে। আমি বুঝতে পেরেছি [] চরিত্র শ্রেণীর জন্য আপনি কীভাবে এটি কাজ করে আমাকে কিছু ধারণা দিতে পারেন? স্নিপেট: ফাঁকা: আমার কাছে নতুন।
— জামশেদ আনসারী ব্যবহারকারী 3000272

এমন কোনও মামলা আছে যেখানে grep -E '\S'কাজ করবে না?
— টেরডন

21

এখানে একটি awkসমাধান:

$ awk NF file

সাথে awk, NFকেবল খালি খালি লাইনে সেট করা আছে। যখন এই শর্তটি মেলে তখন awkডিফল্ট ক্রিয়াটি printপুরো লাইনটি মুদ্রণ করে।


ঝরঝরে, এটি হোয়াইটস্পেস সহ লাইনগুলি সরিয়ে দেয়।
— উইসবাকী

7

কেমন:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

অথবা

sed -e '/^[[:blank:]]*$/d' source_file > newfile

অর্থাত

প্রতিটি লাইনের জন্য, বিকল্প:

  • যদি এটি শুরু হয় (" ^")
  • শূন্যস্থান বা ট্যাবগুলির সাথে (" [[:blank:]]") শূন্য বা আরও বেশি বার (" *")
  • এবং তারপরে লাইনটির শেষে (" $")

:: ফাঁকা :: আরও তথ্য এবং http://www.zytrax.com/tech/web/regex.htm# বিশেষে অন্যান্য বিশেষ অক্ষর


4
[[:space:]]ট্যাব অন্তর্ভুক্ত। কোনও স্থান যদি কোনও ট্যাব অনুসরণ করে তবে এটি আপনার রেজেক্স ব্যর্থ হবে।
— জর্ডানম

wctype(3)এবং isalpha(3)manpages বর্ণনা চরিত্র শ্রেণীর কি ম্যাচ হবে।
— জর্দানম

আপনি প্রথমটি মুছে ফেলতে চাইতে পারেন যা প্রশ্নের উত্তর দেয় না।
— স্টাফেন চেজেলাস

@ মিশেলডুরান্ট আপনি কি [[: ফাঁকা:]] সম্পর্কে কিছু লিখতে পারেন?
— জামশেদ আনসারী ব্যবহারকারী 3000272

[[: ফাঁকা ::]] এর জন্য যুক্ত তথ্য। স্টিফেন, কেন প্রথম কাজ করে না? আমি ভেবেছিলাম // শেষে কিছুই না করে লাইনটি প্রতিস্থাপন করবে।
— মাইকেল ডুরান্ট

4

sedফাঁকা লাইন অপসারণের জন্য আপনি কমান্ডটি ব্যবহার করতে পারেন :

sed '/^$/d' in > out

এই কমান্ডটি "ইন" ফাইল থেকে সমস্ত খালি লাইন মুছে ফেলে


এটি কেবল স্থান এবং ট্যাবযুক্ত রেখাগুলি মুছে ফেলবে না, বিশেষভাবে অনুরোধ অনুসারে।
— dave_thompson_085

3

দেখে মনে হচ্ছে আমি এটির মতো দ্রুত নয় তবে শেষ পর্যন্ত মজার:

| xargs -L1


1
খুব ছোট একটি, তবে এটি আরও বেশি করে: নেতৃস্থানীয় স্পেস এবং ট্যাবগুলিও সরিয়ে দিন।
— 25

ওহ, এটি আরও বেশি সক্ষম বলে মনে হচ্ছে? - চমৎকার! ;
— পি

1
এবং এটি লাইনগুলি কেটে গেছে (1024 অক্ষরে
— জিংগুট

আমি সেই সাধারণ সরঞ্জামটির সাথে আরও গভীর প্রেমে
— পড়ছি

0

প্রাক্তন পথে চেষ্টা করুন :

ex -s +'v/\S/d' -cwq test.txt

একাধিক ফাইলের জন্য (জায়গায় জায়গায় সম্পাদনা করুন):

ex -s +'bufdo!v/\S/d' -cxa *.txt

দ্রষ্টব্য: :bufdoকমান্ডটি পসিক্স নয় ।

ফাইলটি পরিবর্তন না করে (কেবলমাত্র স্ট্যান্ডার্ড আউটপুট প্রিন্ট করুন):

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin


0

নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

grep '\S' FILE

যা স্পেস বা ট্যাব সহ সমস্ত লাইন সরিয়ে দেয়।

অন্যথায়, ফাঁকা স্থান / ট্যাব সহ লাইনগুলি অন্তর্ভুক্ত না করে অপসারণ:

grep . FILE

উদাহরণ স্বরূপ:

$  printf "line1\n\nline2\n \nline3\n" > FILE
$  cat -v FILE
line1

line2

line3
$  grep '\S' FILE
line1
line2
line3
$  grep . FILE
line1
line2

line3

আরো দেখুন:

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