নির্দিষ্ট স্ট্রিং সহ লাইন ছাড়াই ফাইলগুলি দেখুন


12

এমন কোনও প্রোগ্রামের জন্য অনুসন্ধান করা tailবা lessযা আমাকে নির্দিষ্ট স্ট্রিংযুক্ত লাইনগুলি ছাড়া আমার লগগুলি দেখতে দেয়। উদাহরণস্বরূপ ইউএফডাব্লু ( [UFW BLOCK]) প্রবেশ লাইন ছাড়াই আমার সিসলগটি দেখুন ।


যদিও এই বৈশিষ্ট্যটির সাহায্যে আপনার সঠিক সমস্যার বর্ণনার সমাধান সরবরাহ করা সহজ নয় তবে আপনি জানতে আগ্রহী হবেন যে lessকোনও রেজেক্স প্যাটার্নের পরে প্রদর্শিত লাইনগুলিকে ফিল্টার করার সম্ভাবনা সরবরাহ করে। আপনি &প্যাটার্ন অনুসরণ করে টাইপ করে এই বৈশিষ্ট্যটি ব্যবহার করতে পারেন এবং আপনি &একা টাইপ করে এটিকে ফিরিয়ে দিতে পারেন ।
অ্যারন

উত্তর:


13

এর জন্য প্যাটার্ন ম্যাচ ইনভার্শন বিকল্পটি এর -vজন্য grepসত্যই সহায়ক:

grep -v 'UFW BLOCK' /var/log/syslog

এটি আপনাকে সমস্ত লাইন ধারণ করে না তা প্রদর্শন করবে UFW BLOCKgrepডিফল্ট হিসাবে বেসিক নিয়মিত এক্সপ্রেশন হিসাবে ব্যবহার করে, বন্ধনী অন্তর্ভুক্তি এটি স্থান সহ 'ইউএফডাব্লু ব্লক' এর স্বতন্ত্র অক্ষরের জন্য অনুসন্ধান করতে সক্ষম করে। আপনি সম্ভবত কোনও আউটপুট না দিয়ে শেষ করবেন। আপনার যদি স্ট্রিংয়ের চারপাশে বন্ধনী রয়েছে তা নিশ্চিত করার দরকার হয়, সেগুলি থেকে পালাতে \[UFW BLOCK\]পারেন, বা কেবল স্থির স্ট্রিংগুলি অন্তর্ভুক্ত করার -Fবিকল্পটি ব্যবহার করুন grep( এ সম্পর্কে পরামর্শের জন্য জান্না এবং স্টিল্ড্রাইভারকে ধন্যবাদ ):

grep -Fv '[UFW BLOCK]' /var/log/syslog

পেজারে আউটপুটটি পাইপ করে আপনি এটি দেখতে আরও সহজ করতে পারেন less:

grep -v 'UFW BLOCK' /var/log/syslog | less

অথবা পরে দেখার জন্য আপনার হোম ডিরেক্টরিতে কোনও ফাইলে আউটপুট পুনর্নির্দেশ করুন:

grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog

2
আপনি যে fgrepকমান্ডটি সমান এটি ব্যবহার করতে পারেন grep -F
তুলাইনস কর্ডোভা

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

5

এছাড়াও আপনি ব্যবহার করতে পারেন sed'র dপ্রবাহ থেকে প্যাটার্ন সঙ্গে লাইন মুছে ফেলতে কমান্ড প্রয়োগ করুন:

sed '/\[UFW BLOCK\]/d' /var/log/syslog

আমরা []স্বাভাবিকভাবেই পালিয়ে যাই তারা একটি অক্ষর শ্রেণি বোঝায় যার অর্থ "এখানে কোনও কিছুর সাথে মেলে" "


5

আপনি সম্পাদনা ক্ষমতা সহ যে কোনও সরঞ্জাম ব্যবহার করতে পারেন। ইতিমধ্যে আপনাকে কয়েকটি সমাধান দিয়ে সমাধান দেওয়া হয়েছে grepএবং sedএখানে কয়েকটি অন্যান্য পছন্দ রয়েছে। এই সমস্ত সহজেই পাইপ যাবে lessবা moreবা অন্য কিছু।

  1. পার্ল

    perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
    

    যেহেতু এটি পার্ল, টিমটোদি!

    perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
    perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
    
  2. awk

    awk '!/\[UFW BLOCK\]/' file
    

2

আপনি খুব ব্যবহার করতে পারেন awk:

awk '!/PATTERN/' log

যখন আমি একাধিক "প্যাটার্ন" পেয়েছি তখন আমি এটি ব্যবহার করি এবং আমি দুটি এর grepমতো ব্যবহার করতে চাই না :

... | grep -v foo | grep -v bar

সিনট্যাক্সটি যা:

awk '!/PATTERN/ && !/PATTERN2/' log

"যখন আমি একাধিক" প্যাটার্ন "পেয়েছি তখন আমি এটি ব্যবহার করি এবং আমি" ------ এর মতো দুটি গ্রেপ ব্যবহার করতে চাই না grep -Ev "foo|bar"?
αғsнιη

আপনি -eএকাধিক নিদর্শন সংজ্ঞায়িত করতেও ব্যবহার করতে পারেন । grep -v -e 'foo' -e 'bar'
অ্যারোনিকাল

@ আফসিন (আমার মন্তব্য কীভাবে মুছে ফেলা হবে তা জানেন না), আমি একটি
যৌক্তিকতার জন্য বোঝাই

1

সঙ্গে lessকমান্ডের &বিকল্প এটা ফিল্টার করার জন্য নিচের হিসাবে শুধুমাত্র পছন্দসই মিলেছে প্যাটার্ন প্রদর্শন করে সম্ভব,

& /PATTERN/

আপনার ক্ষেত্রে যদি আপনি ফিল্টার লাইনগুলি UFW BLOCKআউটপুট না প্রদর্শিত না চান তবে আপনি কেবল &!নীচের মত ব্যবহার করতে পারেন :

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