ফাইলটিতে স্ট্রিং না থাকা অবস্থায় কীভাবে গ্রেপ ব্যবহার করবেন


26

আমার বাশ স্ক্রিপ্টে আমি একটি লাইন মুদ্রণ করার চেষ্টা করছি যদি কোনও ফাইলের মধ্যে একটি নির্দিষ্ট স্ট্রিং উপস্থিত না থাকে।

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

এইভাবে আমি এটি লিখেছিলাম যদি আমি ফাইলটিতে স্ট্রিংটির উপস্থিতি চাইতাম তবে ব্যবহারকারী / / etc / পাসডাব্লুডিতে ফাইল না পাওয়া গেলে আমি কীভাবে এটিকে "ব্যবহারকারীর অস্তিত্ব" মুদ্রণ করতে পরিবর্তন করব?

উত্তর:


49

grepএটি প্যাটার্নের কমপক্ষে একটি উদাহরণ এবং এটি যদি না পাওয়া যায় তবে ব্যর্থতা ফিরে আসবে। সুতরাং আপনি elseযদি উভয় "না" এবং "না" প্রিন্ট চান তবে আপনি একটি শৃঙ্খলা যুক্ত করতে পারেন, অথবা আপনি ifকেবলমাত্র ব্যর্থতা পেতে শর্তটিকে উপেক্ষা করতে পারেন । প্রতিটি উদাহরণ:

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi

2

একটি বিকল্প হ'ল প্রস্থান স্থিতি সন্ধান করা grep। উদাহরণ স্বরূপ:

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

যদি grepএকটি ম্যাচ এটি থেকে প্রস্থান করা হবে এটি ব্যর্থ 1, তাই $?হবে 1। সফল হলে grepসর্বদা ফিরে আসবে 0। সুতরাং এটির $? != 0চেয়ে ব্যবহার করা নিরাপদ $? == 1


এটি এরিক যা বলেছিল তা বলার সত্যই দীর্ঘতর উপায় ।
জেফ শ্যাচলার

ভাল, আমার জন্য নেতিবাচক if ! grep ...বিবৃতি কাজ করে না। সুতরাং এটি একটি বিকল্প।
সানস্যাচ

1

আমি এটি সহজ একটি লাইনার দিয়ে সমাধান করি:

for f in *.txt; do grep "tasks:" $f || echo $f; done

কমান্ডটি টিএসটি এক্সটেনশনের সাহায্যে ডিরেক্টরিতে থাকা সমস্ত ফাইল চেক করবে এবং সন্ধানের স্ট্রিং লিখবে (অর্থাত "" কার্য: ") যদি পাওয়া যায় তবে ফাইলটির নাম।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.