কোনও শর্ত পূরণ হলেই একটি ফাইল অনুসন্ধান করুন এবং একটি নতুন ফাইল তৈরি করুন


10

আমার একটি লগফিল আছে এবং আমি এটি একটি স্ট্রিংয়ের জন্য অনুসন্ধান করতে চাই এবং কেবল যদি সেই স্ট্রিংটি তৈরি করতে একটি নতুন ফাইল খুঁজে পাওয়া যায়। আমি কীভাবে এটি অর্জন করতে পারি, সেড ডোনেস্ট এই ক্ষেত্রে উপযুক্ত বলে মনে হচ্ছে।


3
grepঅনুসন্ধান করতে ব্যবহার করুন । -qবিকল্প সব আউটপুট দমন, এবং ম্যাচ / nonmatch মাধ্যমে ফিরে আসবে grep'র প্রস্থান কোড, যা খুব সহজেই testable হয়।
ওয়ালটিনেটর

2
শর্তটি কী তা আমাদের জানাতে সহায়ক হতে পারে।
j0h

উত্তর:


16

এর পরে একটি শর্ট সার্কিট মূল্যায়ন করুন grep:

grep -q 'search_pattern' /file && : >/newfile
  • grep -qSTDOUT এ কোনও আউটপুট তৈরি করে না, 0যদি ফাইলটিতে প্যাটার্নটি পাওয়া যায় তবে কেবল প্রস্থান স্থিতি দিয়ে প্রস্থান করে

  • তাহলে ধরণ (পাওয়া যায় &&), একটি ফাইল তৈরি /newfileদ্বারা : >/newfile


আপনি স্বাভাবিক touch /newfileপদ্ধতির জন্যও যেতে পারেন , বা bashএকটি খালি পুনঃনির্দেশ - >/newfileএটিও করবে।

কেবল লক্ষ্য করার জন্য, যদি ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে touchকেবলমাত্র ফাইলটি কাটা ছাড়াই প্রাসঙ্গিক টাইমস্ট্যাম্পগুলি পরিবর্তন করা হবে। এবং খালি পুনঃনির্দেশটি চলতে চলতে >/newfileসমস্ত শেলগুলিতে সমর্থিত নয় (যেমন zsh:), যেখানে আপনাকে ম্যানুয়ালি ইওএফ পাঠাতে হবে।


কি করে :?
জর্জ উদোসেন

5
@ জর্জেগের :পক্ষে সংক্ষিপ্তসার true, এটি কোনও অপ-কমান্ড যা সর্বদা প্রস্থান স্থিতি 0 দিয়ে প্রস্থান করে
হিমাইল

@himayl এটি আজ অবধি সবচেয়ে ভাল কাজ করেছে
জ্যাকনিফ

6

শুধুই মজার জন্য:

python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"

যেখানে 'string'স্ট্রিং (শর্ত) 'logfile'দ্বারা প্রতিস্থাপিত হয় 'newfile', লগফাইলে যাওয়ার পাথ দ্বারা প্রতিস্থাপিত হয়, তৈরির জন্য ফাইলের আসল পাথ দ্বারা প্রতিস্থাপিত হয়, উদাহরণস্বরূপ সমস্ত একক উদ্ধৃতিতে।


4

আপনি এর system()কমান্ড দিয়ে awk ব্যবহার করতে পারেন । যদি এটি /pattern/পাওয়া যায় তবে কোডব্লকটি {}কার্যকর করা হবে , এক্ষেত্রে আমরা কমান্ডের touch /tmp/my_file.txtমাধ্যমে কল করব callsystem()

একটি অস্থায়ী ফাইল তৈরি আছে যদি আমার ব্যবহারকারী উপস্থিত শো নীচের উদাহরণে /etc/passwd

$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd

$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月  25 07:58 /tmp/my_file.txt

বিকল্পভাবে, আমরা ফাইলটি পুনঃনির্দেশ ব্যবহার করতে পারি:

 awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd 

0

আপনি নতুন খালি ফাইল চান কিনা বা আপনি ফাইলটি তৈরি করার জন্য আরও জটিল প্রক্রিয়াজাতকরণ প্রয়োজন কিনা তা আপনি বলবেন না।

প্রাক্তন হলে, @himayl দ্বারা উত্তর স্পট রয়েছে is

অন্যথায়, যদি একটি বিবৃতি ব্যবহার করুন:

if grep -q 'search_pattern' /file
then
    # Create your file here
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.