গ্রেপের মাধ্যমে একটি পাঠ্য ফাইলে খালি লাইনগুলি সরান


84

FILE:

hello

world

foo

bar

আমি কীভাবে এতে সমস্ত খালি নতুন লাইন সরিয়ে ফেলতে পারি FILE?

কমান্ডের আউটপুট:

FILE:

hello
world
foo
bar

উত্তর:


132

grep . FILE


(এবং যদি আপনি সত্যিই এটি সেডে করতে চান তবে sed -e /^$/d FILE) :

(এবং যদি আপনি সত্যিই এটিকে কিছুটা করতে চান তবে awk /./ FILE) :


4
মিষ্টি! অন্যান্য কমান্ডগুলির জন্যও টিওয়াই - তবে মনে হচ্ছে গ্রেপ আমার নতুন সেরা বন্ধু।
ব্যবহারকারী 191960

গ্রেপ ফাইল আমার জন্য কাজ করে না। ফাইলের বিষয়বস্তুগুলি অনুসন্ধান করার জন্য গ্রেপ এবং ফাইলে বিষয়বস্তু সম্পাদনার জন্য সেড করা ভাল।
মাইকেল ডিলন

7
sed -ne/./pখুব বেশি কাজ করে এবং আরও awk /./সংক্ষিপ্ত হয় ( {print}অনির্ধারিত ছেড়ে দেওয়া হলে কর্মটি হয় )। @ ঘোস্টডোগ :৪: grep '[^[:space:]]'তারপরে।
প্রাক্তন

4
যারা বুঝতে পারে না তাদের জন্য, এটি .একটি নিয়মিত প্রকাশ যা নিউলাইন ছাড়া কোনও চরিত্রের সাথে মেলে।
উইসবুকি

4
grep . FILEপ্রদত্ত উদাহরণের সাথে কাজ করে তবে অগত্যা যখন ফাইলটিতে অক্ষরটির অংশ না থাকা বাইট থাকতে পারে। উদাহরণস্বরূপ, জিএনইউ গ্রেপ ২.২০ সহ, printf "\x80\n" | grep .কিছুই আউটপুট করে না।
ভিঙ্ক 17

37

নিম্নলিখিত চেষ্টা করুন:

grep -v -e '^$'

এটি গ্রেপ হিসাবে একই প্রভাব আছে। ফাইলটি ফাঁকা রেখা হিসাবে একটি স্থান দখল করবে।
ghostdog74

4
"গ্রেপ" প্যাটার্নের সাথে মেলে এমন কোনও লাইনের সন্ধান করে। " যে কোনও চরিত্রের সাথে মেলে। "গ্রেপ। ফাইল" কমপক্ষে 1 টি অক্ষরের সাথে যে কোনও লাইনের সাথে মেলে। যেখানে "গ্রেপ-ভি" প্যাটার্নের সাথে মেলে লাইনগুলি বাদ দেয়। ওপি বলেছে "সমস্ত খালি নতুন লাইন সরিয়ে ফেলুন"। আপনি যদি কেবল ফাঁকা জায়গাগুলির সাথে লাইনগুলি বাদ দিতে চান তবে "গ্রেপ-ভি '^ $'"। " " পূর্ববর্তী প্যাটার্নের শূন্য বা আরও বেশিটির সাথে মিলবে, এক্ষেত্রে একটি স্থান। যদিও আপনি অন্য শ্বেতস্পেস অক্ষরগুলি (ট্যাবগুলি, ফর্ম-ফিডস ইত্যাদির সাথে) মিলিয়ে দেখতে এবং বাদ দিতে পছন্দ করতে পারেন।
মিঃআরই

4
এই পদ্ধতিটি আমাকে একাধিক বাদ দিয়ে কেবল "গ্রেপ। ফাইল" এর চেয়ে আরও সহজে একত্রিত করার অনুমতি দেয়। উদাহরণস্বরূপ, আমি একটি কনফাইব ফাইলের দিকে চেয়ে ছিলাম এবং মন্তব্য করা সমস্ত লাইন এবং সমস্ত খালি লাইন বাদ দিতে চেয়েছিলাম। সুতরাং আমি "গ্রেপ-ভি-ও '#' -ই '^ $' স্কিডডকনফ" ব্যবহার করেছি। একটি ট্রিট কাজ করেছেন।
বেন কে

4
এটি 'গ্রেপের চেয়ে অনেক দ্রুত। ফাইল '। এটি 'রেজেক্স' যাচাইকরণের আরও জটিল কাজগুলির কারণে। ' যত তাড়াতাড়ি বাদ দিয়ে ^ ^ মেলে না।
ouডার্ড লোপেজ

4
grep -v -e '^$'সর্বদা কাজ করে, যা এরকম নয় grep .। উদাহরণস্বরূপ, জিএনইউ গ্রেপ ২.২০ এর সাহায্যে printf "\x80\n" | grep .কিছুই আউটপুট দেয় না, printf "\x80\n" | grep -v '^$'খালি খালি লাইনের আউটপুট দেয়।
ভিঙ্ক 17

11
with awk, just check for number of fields. no need regex

$ more file
hello

world

foo

bar

$ awk 'NF' file
hello
world
foo
bar

উদ্ধৃতি দরকার নেই। এই কৌশলটি পাওয়া গেছে awk1line.txt- তারপরেও, তবে বেশিরভাগ
অদ্ভুত

4
কোটগুলি রাখার এটি আমার কেবলমাত্র ভাল অভ্যাস, যেহেতু আপনি এটি শেল থেকে চালাচ্ছেন .. সংশ্লেষ বিশিষ্ট বিবৃতিগুলির জন্য, আপনাকে এখনও উদ্ধৃতি দিতে হবে। তাহলে কেন এই অভ্যাসটি চাষ করবেন না।
ghostdog74

কিভাবে এই কাজ করে ব্যাখ্যা: stackoverflow.com/questions/23544804/...
wisbucky

9

এখানে এমন একটি সমাধান রয়েছে যা সমস্ত ফাঁকা অপসারণ করে যা খালি হয় বা কেবল স্থান অক্ষর থাকে:

grep -v '^[[:space:]]*$' foo.txt

2

এটা চেষ্টা কর: sed -i '/^[ \t]*$/d' file-name

এটি কোনও খালি লাইন মুছে ফেলবে। সাদা স্পেসের (স্পেস বা ট্যাব) অর্থাত (0 বা আরও বেশি) ফাইলে।

দ্রষ্টব্য: বর্গাকার বন্ধনীর ভিতরে '' t 'এর পরে একটি' স্পেস 'রয়েছে।

সংশোধক -iফাইলটিতে ফিরে আপডেট হওয়া সামগ্রীগুলি লিখতে বাধ্য করবে। এই পতাকা ব্যতীত আপনি খালি লাইনগুলি স্ক্রিনে মুছে ফেলা দেখতে পাবেন তবে আসল ফাইলটি প্রভাবিত হবে না।


1

grep '^..' my_file

উদাহরণ

THIS

IS

THE

FILE

EOF_MYFILE

এটি কমপক্ষে 2 টি অক্ষরের সাথে আউটপুট হিসাবে দেয়।

THIS
IS
THE
FILE
EOF_MYFILE

সঙ্গে আরো ফলাফল দেখুন grep '^' my_fileআউটপুট

THIS

IS

THE

FILE

EOF_MYFILE

এবং grep '^.' my_fileআউটপুট সঙ্গে

THIS
IS
THE
FILE
EOF_MYFILE

1

যদি খালি লাইনগুলি অপসারণের অর্থ কোনও স্থান সহ লাইন থাকে তবে ব্যবহার করুন:

grep '\S' FILE

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

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

line2

line3

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

line3

line4

আরো দেখুন:


0

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

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

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

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

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

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

0

পার্ল ওভারকিল হতে পারে তবে এটি ঠিক একইভাবে কাজ করে।

সম্পূর্ণ ফাঁকা সমস্ত লাইন সরিয়ে দেয়:

perl -ne 'print if /./' file

সম্পূর্ণ শূন্য, বা কেবল শ্বেত স্থান রয়েছে এমন সমস্ত লাইন সরিয়ে দেয়:

perl -ne 'print if ! /^\s*$/' file

ভিন্নতা যা আসলটি সম্পাদনা করে এবং একটি .bak ফাইল তৈরি করে:

perl -i.bak -ne 'print if ! /^\s*$/' file

0

আপনি যদি জানতে চান যে কোডের মোট লাইনগুলি আপনার এক্সকোড প্রকল্পে রয়েছে এবং আপনি প্রতিটি সুইফট ফাইলের জন্য গণনা তালিকাতে আগ্রহী না হন তবে এটি আপনাকে উত্তর দেবে। এটি কোনও কোডবিহীন লাইনগুলি সরিয়ে দেয় এবং মন্তব্যের সাথে উপস্থাপিত লাইনগুলি সরিয়ে দেয়//

আপনার এক্সকোড প্রকল্পের মূল স্তরে এটি চালান।

find . \( -iname \*.swift \) -exec grep -v '^[[:space:]]*$' \+ | grep -v -e '//' | wc -l

আপনার কোডটিতে যদি মন্তব্য ব্লক থাকে এবং এর সাথে /*শেষ হয় */:

/*
 This is an comment block 
*/

তাহলে এগুলি গণনায় অন্তর্ভুক্ত হবে। (খুব কঠিন).


0

সহজ উত্তর -----------------------------------------

[root@node1 ~]# cat /etc/sudoers | grep -v -e ^# -e ^$
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
[root@node1 ~]#
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.