কিভাবে একটি গ্রেপ এক্সপ্রেশন বিপরীত


237

নিম্নলিখিত গ্রিপ এক্সপ্রেশনটি বর্তমান ডিরেক্টরি এবং উপ ডিরেক্টরিগুলির সমস্ত .exe এবং .html ফাইলগুলি সফলভাবে তালিকাভুক্ত করে।

ls -R |grep -E .*[\.exe]$\|.*[\.html]$  

পরিবর্তে .html বা .exe নয় এমনদের তালিকাতে আমি কীভাবে এই ফলাফলটিকে উল্টাবো। (এটি !=,।)

উত্তর:


337

কমান্ড-লাইন বিকল্প ব্যবহার করুন -vবা --invert-match,

ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$

4
এটি লক্ষ করা উচিত যে -v/ --invert-matchরিটার্ন কোডটি grepকার্যকর সম্পাদন নির্দেশ করে কিনা তা অবশ্যই ফ্লিপ করবে না , তবে পরিবর্তে সেই লাইনের সাথে মিলবে যা অন্যথায় মিলে না। যারা রিটার্ন কোডটি উল্টাতে চাইছেন (অর্থাত্ লাইনগুলির সমস্ত প্যাটার্নের সাথে মেলে না তবে কমপক্ষে একটির পরিবর্তে) সফল হওয়া উচিত ! grep। এই খুঁজে বের করে শর্তসাপেক্ষ এক্সপ্রেশন মধ্যে যেমন ব্যবহার করেন,: if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
জিল

98
grep -v

অথবা

grep --invert-match

আপনি একই জিনিস ব্যবহার করে করতে পারেন find:

find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)

আরও তথ্য এখানে


2
findকমান্ড এই XY সমস্যা সবচেয়ে শব্দার্থিক সমাধান। সংমিশ্রণ lsএবং grepএই উদ্দেশ্যে সেরা হ্যাকিং মনে হয়। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। (+1)
এরিক সিস্ট্র্যান্ড 15

4
@ এরিক ওপি'র প্রয়োজনীয়তা নির্বিশেষে, গ্রেপ এক্সপ্রেশন উল্টানো ফাইলগুলি সন্ধানের চেয়ে অনেক বেশি কার্যকর। আমি সন্দেহ করি এ কারণেই বেশিরভাগ লোক এখানে আসে।
বাইসোর



7

একাধিকবার বলা হয়েছে, বিপরীতটি -vবিকল্পটি অর্জন করে grep। আমাকে (আশা করি মজাদার) নোটটি যোগ করতে দিন যে grepসাহায্যের পাঠ্যের মাধ্যমে গ্রেপ করে আপনি নিজেই এটি বের করতে পেরেছিলেন :

grep --help | grep invert

-v, --invers-ম্যাচটি অ-ম্যাচিং লাইন নির্বাচন করুন

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