উত্তর:
grep -Fxq "$FILENAME" my_list.txt
নামটি পাওয়া গেলে প্রস্থান স্থিতি 0 (সত্য), 1 (মিথ্যা) না থাকলে, তাই:
if grep -Fxq "$FILENAME" my_list.txt
then
# code if found
else
# code if not found
fi
ম্যান পৃষ্ঠারgrep
সম্পর্কিত বিভাগগুলি এখানে রইল :
grep [options] PATTERN [FILE...]
-F
,--fixed-strings
PATTERN কে নতুন লাইনের দ্বারা পৃথক করা স্থির স্ট্রিংগুলির একটি তালিকা হিসাবে ব্যাখ্যা করুন, যার মধ্যে কোনওটি মিলে যেতে হবে।
-x
,--line-regexp
কেবল সেই ম্যাচগুলি নির্বাচন করুন যা পুরো লাইনের সাথে মেলে।
-q
,--quiet
,--silent
শান্ত; স্ট্যান্ডার্ড আউটপুটে কিছু লিখবেন না। কোনও মিল খুঁজে পাওয়া গেলেও তাত্ক্ষণিক শূন্য স্থিতির সাথে প্রস্থান করুন, ত্রুটি সনাক্ত করা হলেও। এছাড়াও বিকল্প
-s
বা--no-messages
বিকল্পটি দেখুন।
মতামতগুলিতে যথাযথভাবে নির্দেশিত হিসাবে, উপরের পদ্ধতিরটি নীরবে ত্রুটি কেসগুলির সাথে আচরণ করে যেমন স্ট্রিংটি পাওয়া গেছে। আপনি যদি অন্যভাবে ত্রুটিগুলি পরিচালনা করতে চান তবে আপনাকে -q
বিকল্পটি বাদ দিতে হবে এবং প্রস্থান স্থিতির উপর ভিত্তি করে ত্রুটিগুলি সনাক্ত করতে হবে:
সাধারণত, নির্বাচিত লাইনগুলি পাওয়া গেলে এবং প্রস্থানের স্থিতি 0 হয় otherwise কিন্তু প্রস্থান অবস্থা 2 হলে, একটি ত্রুটি ঘটেছে যদি না
-q
বা--quiet
বা--silent
বিকল্প ব্যবহার করা হয় এবং একটি নির্বাচিত লাইন পাওয়া যায়। উল্লেখ্য, যে POSIX শুধুমাত্র ম্যান্ডেট যেমন প্রোগ্রামের জন্যgrep
,cmp
এবংdiff
, যে ত্রুটি ক্ষেত্রে প্রস্থান অবস্থা 1 থেকে বেশি হতে; সুতরাং পোর্টাবিলিটির জন্য, যুক্তি ব্যবহার করা বাঞ্ছনীয় যে এটি 2 এর সাথে কঠোর সাম্যের পরিবর্তে এই সাধারণ অবস্থার জন্য পরীক্ষা করে।
থেকে স্বাভাবিক আউটপুট দমন grep
করতে, আপনি এটিকে পুনর্নির্দেশ করতে পারেন /dev/null
। নোট করুন যে স্ট্যান্ডার্ড ত্রুটিটি পুনঃনির্দেশিত থেকে যায়, সুতরাং যে কোনও ত্রুটি বার্তাগুলি grep
মুদ্রণ করতে পারে সেগুলি কনসোলে আপনার পছন্দ হিসাবে শেষ হবে।
তিনটি কেস পরিচালনা করতে, আমরা একটি case
বিবৃতি ব্যবহার করতে পারি :
case `grep -Fx "$FILENAME" "$LIST" >/dev/null; echo $?` in
0)
# code if found
;;
1)
# code if not found
;;
*)
# code if an error occurred
;;
esac
$?
। আপনি if
স্টেটমেন্টের পাশাপাশি গ্রেপ কমান্ডটিও ব্যবহার করতে পারেন (আপডেট উত্তরে দেখানো হয়েছে)।
grep -Fqx "$FILENAME"
এবং আপনাকে পরিবর্তনশীল বিষয়বস্তুতে রেজেক্স অক্ষর সম্পর্কে চিন্তা করতে হবে না এবং আপনাকে সেগুলি অনুসন্ধানের স্ট্রিংয়ে ব্যবহার করতে হবে না।
-q / --silent
দরকার নেই? এটি ত্রুটিযুক্ত হয়ে গেলেও মিথ্যাভাবে "সমস্ত ভাল" বলে বাশ করতে বলে। আমি যদি এটি সঠিকভাবে পেয়েছি। এই মামলার জন্য একটি ত্রুটিযুক্ত ধারণা বলে মনে হচ্ছে।
নিম্নলিখিত সমাধান সম্পর্কে:
grep -Fxq "$FILENAME" my_list.txt
আপনি যদি ভাবছেন (যেমন আমি করেছিলাম) তখন -Fxq
সরল ইংরাজীতে কী বোঝায়:
F
: PATTERN কীভাবে ব্যাখ্যা করা হয় তা প্রভাবিত করে (একটি রেজেক্সের পরিবর্তে স্থির স্ট্রিং)x
: পুরো লাইন মেলেq
: Shhhhh ... নূন্যতম মুদ্রণম্যান ফাইল থেকে:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.
(-F is specified by POSIX.)
-x, --line-regexp
Select only those matches that exactly match the whole line. (-x is specified by POSIX.)
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immediately with zero status if any match is
found, even if an error was detected. Also see the -s or --no-messages option. (-q is specified by
POSIX.)
আমার মনে তিনটি পদ্ধতি:
1) কোনও পাথের নামের জন্য সংক্ষিপ্ত পরীক্ষা (আমি নিশ্চিত না যে এটি আপনার ক্ষেত্রে হতে পারে)
ls -a "path" | grep "name"
2) একটি ফাইলের স্ট্রিংয়ের জন্য সংক্ষিপ্ত পরীক্ষা
grep -R "string" "filepath"
3) রেজেেক্স ব্যবহার করে দীর্ঘ বাশ স্ক্রিপ্ট:
#!/bin/bash
declare file="content.txt"
declare regex="\s+string\s+"
declare file_content=$( cat "${file}" )
if [[ " $file_content " =~ $regex ]] # please note the space before and after the file content
then
echo "found"
else
echo "not found"
fi
exit
যদি আপনার কোনও লুপ ব্যবহার করে কোনও ফাইল সামগ্রীতে একাধিক স্ট্রিং পরীক্ষা করতে হয় তবে এটি দ্রুত হওয়া উচিত উদাহরণস্বরূপ যে কোনও সাইকেলের রেজেক্স পরিবর্তন করা।
সহজ উপায়:
if grep "$filename" my_list.txt > /dev/null
then
... found
else
... not found
fi
টিপ: আপনি /dev/null
যদি কমান্ডের প্রস্থান স্থিতি চান তবে প্রেরণ করুন , তবে ফলাফলগুলি নয়।
-q
যা --quiet
:)
-q
এখানে সেরা উত্তরের সাথে একমত হন , এবং এটি চতুর্থ স্থানে রয়েছে। এই পৃথিবীতে কোন ন্যায়বিচার নেই।
সবচেয়ে সহজ এবং সহজ উপায় হ'ল:
isInFile=$(cat file.txt | grep -c "string")
if [ $isInFile -eq 0 ]; then
#string not contained in file
else
#string is in file at least once
fi
গ্রেপ-সি ফাইলটিতে স্ট্রিংটি কতবার ঘটে তার গণনা ফিরিয়ে দেবে।
যদি আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনার যা প্রয়োজন তা করা উচিত।
এক লাইনে :check="/tmp/newdirectory"; [[ -n $(grep "^$check\$" my_list.txt) ]] && echo "dir already listed" || echo "$check" >> my_list.txt
grep -q
সরাসরি গ্রেপ ব্যবহার করতে এবং কল করতে পারেন if
। অধিকন্তু, তালিকায় ডিরেক্টরিটি যুক্ত করার আগে ডিরেক্টরিটি উপস্থিত রয়েছে কিনা তা প্রশ্নের মধ্যে অন্তর্ভুক্ত ছিল না (এটি সর্বোপরি মুছে ফেলা ডিরেক্টরিগুলির একটি তালিকা হতে পারে))
আমার সংস্করণ fgrep ব্যবহার করে
FOUND=`fgrep -c "FOUND" $VALIDATION_FILE`
if [ $FOUND -eq 0 ]; then
echo "Not able to find"
else
echo "able to find"
fi
-c
বিকল্পটি দেখতে পাচ্ছি নাfgrep --help
grep -E "(string)" /path/to/file || echo "no match found"
-E বিকল্পটি গ্রেপ ব্যবহারকে নিয়মিত এক্সপ্রেশন দেয়
@ থমাসের সমাধানটি কোনও কারণে আমার পক্ষে কার্যকর হয়নি তবে আমার বিশেষ অক্ষর এবং শ্বেত স্পেসগুলির সাথে দীর্ঘতর স্ট্রিং ছিল তাই আমি ঠিক এই জাতীয় পরামিতিগুলি পরিবর্তন করেছি:
if grep -Fxq 'string you want to find' "/path/to/file"; then
echo "Found"
else
echo "Not found"
fi
আশা করি এটি কাউকে সাহায্য করবে
একটি গ্রেপ-কম সমাধান, আমার জন্য কাজ করে:
MY_LIST=$( cat /path/to/my_list.txt )
if [[ "${MY_LIST}" == *"${NEW_DIRECTORY_NAME}"* ]]; then
echo "It's there!"
else
echo "its not there"
fi
grep -q
বর্ণিত সর্বাধিক দক্ষ পন্থা।
grep -Fxq "String to be found" | ls -a
ls
স্ট্যান্ডার্ড ইনপুট গ্রহণ করে?