"বিড়াল" এবং "ইঁদুর" শব্দযুক্ত টেক্সট ফাইল থেকে সমস্ত লাইন কীভাবে সরিয়ে ফেলবেন?
"বিড়াল" এবং "ইঁদুর" শব্দযুক্ত টেক্সট ফাইল থেকে সমস্ত লাইন কীভাবে সরিয়ে ফেলবেন?
উত্তর:
grep অভিগমন"বিড়াল" বা "ইঁদুর" না মিলিয়ে লাইনগুলি না দিয়ে ফাইলটির অনুলিপি তৈরি করতে, কেউ grepবিপরীত ( -v) এবং পুরো শব্দ বিকল্প ( -w) সহ ব্যবহার করতে পারে ।
grep -vwE "(cat|rat)" sourcefile > destinationfile
পুরো শব্দ বিকল্পটি নিশ্চিত করে যে এটি মেলে না catsবা gratefulউদাহরণস্বরূপ for আপনার শেলের আউটপুট পুনর্নির্দেশটি >নতুন ফাইলটিতে লিখতে ব্যবহৃত হয় ( )। সিনট্যাক্সের -Eজন্য বর্ধিত নিয়মিত প্রকাশগুলি সক্ষম করার জন্য আমাদের বিকল্পের প্রয়োজন (one|other)।
sed অভিগমনবিকল্পভাবে, স্থানটিতে থাকা লাইনগুলি সরাতে এটি ব্যবহার করতে পারে sed -i:
sed -i "/\b\(cat\|rat\)\b/d" filename
\bসেট শব্দ টি চার আর dঅপারেশন ফরওয়ার্ড স্ল্যাশ মধ্যে অভিব্যক্তি মিলে লাইন মুছে ফেলা হবে। catএবং ratউভয়ই (one|other)সিনট্যাক্সের সাথে মিলে যাচ্ছে যা আমাদের স্পষ্টতই ব্যাকস্ল্যাশ সহ পালাতে হবে।
টিপ: ফাইলটি ওভাররাইট করার আগে কমান্ডের আউটপুট পরীক্ষা sedকরতে -iঅপারেটর ছাড়াই ব্যবহার করুন।
( শেডের উপর ভিত্তি করে - একটি নির্দিষ্ট স্ট্রিংযুক্ত একটি লাইন মুছুন )
শুধুমাত্র টার্মিনালে পরীক্ষা করতে, ব্যবহার করুন:
sed '/[cr]at/d' file_name
ফাইল থেকে সত্যই এই লাইনগুলি সরাতে, ব্যবহার করুন:
sed -i '/[cr]at/d' file_name
যদি আপনার সাথে ফাইল আছে বিবেচনা করুন file_nameএবং আপনার মাউস অনুসন্ধান করতে চান কিন্তু মাউস থেকে কয়েক সারি মত অন্য কথায় থাকার একই সময়ে catএবং ratএবং আপনি আপনার আউটপুটে সেই দেখতে না চান, তাই এক উপায় এটা করতে -
grep -r mouse file_name | grep -vE "(cat|rat)"
কাজ করে /bin/shযা dashউবুন্টুতে রয়েছে, পাশাপাশি ksh, এবং bash। খানিকটা বিশ্রী যে আপনাকে caseবিবৃতিতে প্রতিটি শব্দের জন্য একাধিক পরীক্ষার মামলা লিখতে হবে তবে বহনযোগ্য cases এই ক্ষেত্রে কাজ করে যেখানে শব্দটি রেখার একা লাইনের শুরুতে, শেষের দিকে বা লাইনের মাঝখানে উপস্থিত হয় এবং যেখানে এটি অন্য শব্দের অংশ হতে পারে তা উপেক্ষা করে।
#!/bin/sh
line_handler(){
# $1 is line read, prints to stdout
case "$1" in
cat|cat\ *|*\ cat\ *|*\ cat) true;; # do nothing if cat or rat in line
rat|rat\ *|*\ rat\ *|*\ rat) true;;
*) printf "%s\n" "$1"
esac
}
readlines(){
# $1 is input file, the rest is words we want to remove
inputfile="$1"
shift
while IFS= read -r line;
do
line_handler "$line" "$@"
done < "$inputfile"
[ -n "$line" ] && line_handler "$line"
}
readlines "$@"
এবং এটি এইভাবে কাজ করে:
$ cat input.txt
the big big fat cat
the cat who likes milk
jumped over gray rat
concat
this is catchy
rat
rational
irrational
$ ./dellines.sh input.txt
concat
this is catchy
rational
irrational