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


উত্তর:


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.