এক্সওয়াইয়ের চেয়ে কম লাইনগুলি কীভাবে সরাবেন?


29

আমি একটি প্রশ্ন পেয়েছি, কীভাবে লম্বা লম্বাগুলি সরিয়ে ফেলতে হবে 2048 অক্ষর:

এক্সওয়াইয়ের চেয়ে বেশি হলে লাইনটি কীভাবে মুছবেন?

প্রশ্ন: তবে আমি কীভাবে 4 টি অক্ষরকে আরও ছোট করে সরিয়ে ফেলব? সুতরাং কোনও ফাইলে 1 বা 2 বা 3 দৈর্ঘ্যের লাইনগুলি সরান।

আপডেট: অনেক ভাল উত্তরের জন্য ধন্যবাদ, তবে আমি কেবল একটি ঠিক হিসাবে চিহ্নিত করতে পারি

উত্তর:


42

আপনি ব্যবহার করতে পারে sed। নিম্নলিখিত 3 অক্ষর দীর্ঘ বা ছোট লাইনগুলি মুছে ফেলবে:

sed -r '/^.{,3}$/d' filename

জায়গায় থাকা ফাইলটিতে পরিবর্তনগুলি সংরক্ষণ করতে, -iবিকল্পটি সরবরাহ করুন ।

যদি আপনার সংস্করণটি sedপ্রসারিত আরআর সিনট্যাক্স সমর্থন করে না, তবে আপনি বিআরই তে একই লিখতে পারেন:

sed '/^.\{,3\}$/d' filename

যা সমস্ত sedরূপের সাথে কাজ করবে ।


আপনি এটি ব্যবহার করতে পারেন awk:

awk 'length($0)>3' filename

ব্যবহার perl:

perl -lne 'length()>3 && print' filename

sed '/^.\{,3\}$/d'বাসদ সাথে কাজ করে না sed: sed: 1: "/^.\{,3\}$/d": RE error: invalid repetition count(s)। সিড-আর সংস্করণটি সিন্টেক্সিকভাবে বৈধ, তবে লাইনগুলি সরাবে না।
ডেরিকসন

5

আরও কিছু বৈচিত্র:

grep .... file

অথবা

sed '/..../!d' file

অথবা

sed -n 's/./&/4p' file

অথবা

awk 'gsub(/./,"&")>3' file

অথবা

awk 'length>3' file

বা জিএনইউ অবাক:

awk 'NF>3' FS= file

1
ওহ গ্রেপ .... এত মার্জিত!
grofte

3

এখানে ভিমের এক্স মোড এবং globalকমান্ডটি ব্যবহার করে ভিম সমাধান দেওয়া হচ্ছে ।

এটি ব্যবহারের সাথে খুব মিল sed, কেবলমাত্র কিছু বিশেষ অক্ষর ('{', '}') এড়ানো দরকার।

:g/^.\{,3\}$/d

ভিমের ভেরি ম্যাজিক রেজেক্স মোড (\ v) ব্যবহার করে এই পালানো এড়ানো যায়।

:g/\v^.{,3}$/d

আরও দেখুন: যাদুতে সহায়তা করুন

Use of "\v" means that in the pattern after it all ASCII characters except
'0'-'9', 'a'-'z', 'A'-'Z' and '_' have a special meaning.  "very magic"

এছাড়াও কখনও কখনও দরকারী সঙ্গে বিপরীত করা হয় vglobal

:v/\v^.{,3}$/d

3 অক্ষর পর্যন্ত লাইনগুলি বাদ দিয়ে সবকিছু মুছবে।


1

আপনি যে লাইনগুলি পারতেন তা সরাসরি সরানোর জন্য:

sed -ri '/.{4}/!d' /path/to/file

বা বিআরই:

sed -i '/.\{4\}/!d' /path/to/file

যদি কোনও লাইনে 4 বা ততোধিক অক্ষর না থাকে তবে এটি মুছে ফেলা হবে।

f=/path/to/file
cat <<GREP >"$f"
    $(grep -E ".{4}" "$f")
GREP

কমান্ড-সাবস্টিটিউশন সাবশেলের উপরোক্ত কাজগুলি নিশ্চিত করা নিশ্চিত করে যে grepবিড়াল এটি লেখা শুরু করার আগে এটির উপর একটি পঠিত বিবরণী পেয়েছে, তবে প্রতিশ্রুতিও <<HEREDOCনিশ্চিত করবে যে ফলাফলটি প্রবাহিত থাকবে এবং যুক্তির দৈর্ঘ্যের ত্রুটি সৃষ্টি করবে না।



0

আপনি ব্যবহার করতে পারেন grep:

যদি আপনি লাইন দৈর্ঘ্যের শীর্ষস্থানীয় স্থানগুলি গণনা করেন:

grep -e '[^\ ]\{4,\}' file

আপনি যদি লাইন লম্বায় শীর্ষস্থানগুলিকে গণনা না করেন:

grep -e '[^\]\{4,\}' file
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.