এখানে বিভিন্ন পদ্ধতির সংক্ষিপ্তসার রয়েছে যা কেবল পাঠ্যের নির্দিষ্ট স্ট্রিংগুলির জন্য ফাইলগুলি অনুসন্ধানের জন্য ব্যবহার করা যেতে পারে, কেবলমাত্র কয়েকটি পাঠ্য ফাইলের সাথে কাজ করার জন্য কয়েকটি বিকল্প যুক্ত করা হয় এবং বাইনারি / অ্যাপ্লিকেশন ফাইলগুলি উপেক্ষা করা যায়।
যাইহোক, একটি লক্ষ্য করা উচিত যে শব্দের জন্য অনুসন্ধান করা একটু জটিল হতে পারে, কারণ বেশিরভাগ লাইন-মিলের সরঞ্জামগুলি লাইনের যে কোনও জায়গায় কোনও শব্দ খুঁজে পাওয়ার চেষ্টা করবে। যদি আমরা এমন কোনও শব্দটির কথা বলছি যা লাইনটির শুরু বা শেষের দিকে উপস্থিত হতে পারে, বা একা লাইনে বা ফাঁকা স্থান এবং / অথবা বিরামচিহ্ন দ্বারা ঘিরে থাকে - তখনই আমাদের নিয়মিত অভিব্যক্তি প্রয়োজন হবে এবং বিশেষত যেগুলি আসে পার্ল থেকে এখানে, উদাহরণস্বরূপ, আমরা ব্যবহার করতে পারেন -P
মধ্যে grep
পার্ল রেগুলার এক্সপ্রেশন ব্যবহার করতে এটা ঘিরা।
$ printf "A-well-a don't you know about the bird?\nWell, everybody knows that the bird is a word" | grep -noP '\bbird\b'
1:bird
2:bird
সাধারণ গ্রেপ
$ grep -rIH 'word'
-r
বর্তমান ডিরেক্টরি থেকে পুনরাবৃত্ত অনুসন্ধানের জন্য
-I
বাইনারি ফাইল উপেক্ষা করতে
-H
যেখানে মিল পাওয়া যায় সেখানে ফাইলের আউটপুট to
কেবল অনুসন্ধানের জন্য উপযুক্ত।
সন্ধান করুন + গ্রেপ
$ find -type f -exec grep -IH 'word' {} \;
find
পুনরাবৃত্ত অনুসন্ধানের অংশটি করে
-I
বিকল্প হ'ল বাইনারি ফাইলগুলি উপেক্ষা করা
-H
যেখানে আউটপুট ফাইলের নাম খুঁজে পাওয়া যায় line
সাবশেলের মধ্যে অন্যান্য কমান্ডের সাথে একত্রিত করার জন্য ভাল পন্থা, যেমন:
$ find -type f -exec sh -c 'grep -IHq "word" "$1" && echo "Found in $1"' sh {} \;
পার্ল
#!/usr/bin/env perl
use File::Find;
use strict;
use warnings;
sub find_word{
return unless -f;
if (open(my $fh, $File::Find::name)){
while(my $line = <$fh>){
if ($line =~ /\bword\b/){
printf "%s\n", $File::Find::name;
close($fh);
return;
}
}
}
}
# this assumes we're going down from current working directory
find({ wanted => \&find_word, no_chdir => 1 },".")
রিকার্সিভ ব্যাশ স্ক্রিপ্টে দরিদ্র-মনুষ্যগণের পুনরাবৃত্ত গ্রেপ
এটি "বাশ ওয়ে" way আদর্শ নয়, সম্ভবত আপনি যখন ইনস্টল grep
বা perl
ইনস্টল করবেন তখন এটি ব্যবহারের সম্ভবত কোনও ভাল কারণ নেই ।
#!/usr/bin/env bash
shopt -s globstar
#set -x
grep_line(){
# note that this is simple pattern matching
# If we wanted to search for whole words, we could use
# word|word\ |\ word|\ word\ )
# although when we consider punctuation characters as well - it gets more
# complex
case "$1" in
*word*) printf "%s\n" "$2";;
esac
}
readlines(){
# line count variable can be used to output on which line match occured
#line_count=1
while IFS= read -r line;
do
grep_line "$line" "$filename"
#line_count=$(($line_count+1))
done < "$1"
}
is_text_file(){
# alternatively, mimetype command could be used
# with *\ text\/* as pattern in case statement
case "$(file -b --mime-type "$1")" in
text\/*) return 0;;
*) return 1;;
esac
}
main(){
for filename in ./**/*
do
if [ -f "$filename" ] && is_text_file "$filename"
then
readlines "$filename"
fi
done
}
main "$@"
grep -r word .
।