উইন্ডোজ এফআইএনডিআরএসটি কমান্ডের অপ্রকাশিত বৈশিষ্ট্য এবং সীমাবদ্ধতাগুলি কী কী?


188

উইন্ডোজ FINDSTR কমান্ডটি ভয়াবহভাবে নথিভুক্ত docu এর মাধ্যমে খুব বুনিয়াদী কমান্ড লাইন সহায়তা পাওয়া যায় FINDSTR /?, বা HELP FINDSTRএটি অসম্পূর্ণভাবে অপর্যাপ্ত। অনলাইনে https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr এ আরও কিছুটা ডকুমেন্টেশন রয়েছে ।

অনেকগুলি FINDSTR বৈশিষ্ট্য এবং সীমাবদ্ধতা রয়েছে যা ডকুমেন্টেশনে ইঙ্গিতও দেয় না। পূর্বের জ্ঞান এবং / বা সতর্কতার সাথে পরীক্ষা-নিরীক্ষা ব্যতীত এগুলি অনুমান করা যায় না।

সুতরাং প্রশ্নটি হল - নিবন্ধিত FINDSTR বৈশিষ্ট্য এবং সীমাবদ্ধতাগুলি কী কী?

এই প্রশ্নের উদ্দেশ্য হ'ল বহু অনাবৃত বৈশিষ্ট্যগুলির একটি স্টপ রিপোজিটরি সরবরাহ করা যাতে:

ক) বিকাশকারীরা সেখানে থাকা বৈশিষ্ট্যগুলির পুরো সুবিধা নিতে পারে।

খ) বিকাশকারীরা যখন কিছু মনে হয় এমনটি করা উচিত তখন কেন তা কাজ করে না তা ভেবে তাদের সময় নষ্ট করবেন না।

প্রতিক্রিয়া দেওয়ার আগে দয়া করে নিশ্চিত করুন যে আপনি বিদ্যমান ডকুমেন্টেশনগুলি জানেন। যদি তথ্যটি হেল্প দ্বারা আচ্ছাদিত থাকে তবে এটি এখানে নেই।

উভয়ই FINDSTR এর আকর্ষণীয় ব্যবহারগুলি দেখানোর জায়গা নয়। যদি কোনও যৌক্তিক ব্যক্তি ডকুমেন্টের ভিত্তিতে FINDSTR এর নির্দিষ্ট ব্যবহারের আচরণটি অনুমান করতে পারে, তবে এটি এখানে অন্তর্ভুক্ত নয়।

একই লাইনের পাশাপাশি, যদি কোনও যৌক্তিক ব্যক্তি কোনও বিদ্যমান উত্তরের মধ্যে থাকা তথ্যের ভিত্তিতে কোনও নির্দিষ্ট ব্যবহারের আচরণের প্রত্যাশা করতে পারে, তবে আবার এটি এখানে অন্তর্ভুক্ত নয়।


15
অথবা, অন্যথা, আপনি ন্যক্কারজনক অনথিভুক্ত মাইক্রোসফট ইউটিলিটি পুরাপুরি খানা এবং ইনস্টল / ব্যবহার করতে পারে grepযা হয় খুব ভাল বোঝা যায় এবং নথিভুক্ত :-) দেখুন stackoverflow.com/questions/2635740/... উদাহরণস্বরূপ।
paxdiablo

17
যাইহোক, আপনি যদি FINDSTR ব্যতীত অন্য কিছু ব্যবহার করার মতো অবস্থানে থাকেন তবে তা অত্যন্ত পরামর্শ দেওয়া হয়। তবে কিছু লোক এমন পরিবেশে আছেন যেখানে তৃতীয় পক্ষের ইউটিলিটিগুলি নিষিদ্ধ করা হয়েছে।
dbenham

4
কোন অপরাধ নেওয়া হয়নি। আমি গুরুত্ব সহকারে আমার নিজস্ব ফিনড্রাস্টার অস্বীকৃতিটি রেখেছিলাম যা আপনার মন্তব্যের সাথে মিল ছিল! :)
dbenham

41
আমি হতবাক এবং হতাশ কেউ এই প্রশ্নটি "কনস্ট্রাকটিভ নয়" খুঁজে পেতে এবং বন্ধ করার জন্য ভোট পাবে। "মতামত, বিতর্ক, যুক্তি, পোলিং বা বর্ধিত আলোচনা" এড়াতে বিশেষত অনেক চিন্তাভাবনা প্রশ্নে intoুকে পড়ে। প্রশ্নটি 3.5 মাস ধরে পোস্ট করা হয়েছে, এবং উদ্ধৃত নেতিবাচকগুলির মধ্যে একটিও ঘটেনি। যুক্ত করা উত্তরটি সত্যগুলিতে পূর্ণ এবং এর জন্য প্রচুর পরিশ্রমী গবেষণা এবং পরীক্ষা-নিরীক্ষা প্রয়োজন।
dbenham

উত্তর:


279

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

FINDSTR আউটপুট
ডকুমেন্টেশন FINDSTR এর আউটপুট ব্যাখ্যা করতে কখনই বিরক্ত করে না। এটি মিলিয়ে লাইনগুলি মুদ্রিত হয়েছে এটিকে বোঝায়, তবে এর চেয়ে বেশি কিছুই নয়।

মিলের লাইন আউটপুটটির ফর্ম্যাটটি নিম্নরূপ:

ফাইলের নাম: lineNumber: lineOffset: পাঠ্য

কোথায়

fileName: = ম্যাচিং লাইন থাকা ফাইলটির নাম। যদি অনুরোধটি একটি একক ফাইলের জন্য স্পষ্টভাবে ছিল বা পাইপ ইনপুট বা পুনঃনির্দেশিত ইনপুট অনুসন্ধান করা হয় তবে ফাইলের নাম মুদ্রিত হয় না। মুদ্রিত হলে ফাইলনাম সর্বদা প্রদত্ত যে কোনও পথের তথ্য অন্তর্ভুক্ত করবে। /Sবিকল্পটি ব্যবহারকরা হলে অতিরিক্ত পাথের তথ্য যুক্ত করা হবে। মুদ্রিত পথটি সর্বদা প্রদত্ত পাথের সাথে সম্পর্কিত, বা যদি কোনও সরবরাহ না করা হয় তবে বর্তমান ডিরেক্টরি সম্পর্কিত।

দ্রষ্টব্য - নন-স্ট্যান্ডার্ড (এবং দুর্বল নথিভুক্ত) ওয়াইল্ডকার্ড < এবং ব্যবহার করে একাধিক ফাইল অনুসন্ধান করার সময় ফাইলের নাম উপসর্গ এড়ানো যেতে পারে >। এই ওয়াইল্ডকার্ডগুলি কীভাবে কাজ করে তার সঠিক নিয়মগুলি এখানে পাওয়া যাবে । অবশেষে, আপনি কীভাবে FINDSTR এর সাথে অ-মানক ওয়াইল্ডকার্ডগুলি কাজ করে তার এই উদাহরণটি দেখতে পারেন ।

লাইন নাম্বার : = ইনপুটটির 1 ম লাইন উপস্থাপন করে 1 সহ দশমিক মান হিসাবে উপস্থাপিত মিলের লাইনের লাইন নম্বর। /Nঅপশন নির্দিষ্ট করাথাকলে কেবল মুদ্রিত।

লাইনঅফসেট: = 1 ম লাইনটির 1 ম অক্ষরটি উপস্থাপন করে 0 দিয়ে ম্যাচিং লাইনের সূচনার দশমিক বাইট অফসেট। /Oঅপশন নির্দিষ্ট করাথাকলে কেবল মুদ্রিত। এটিলাইনের মধ্যে ম্যাচের অফসেট নয় । এটি ফাইলের শুরু থেকে শুরু করে লাইনের শুরু পর্যন্ত বাইট সংখ্যা।

পাঠ্য = কোনও <সিআর> এবং / অথবা <এলএফ> সহ মিলের লাইনের বাইনারি উপস্থাপনা। বাইনারি আউটপুট থেকে কিছুই বাদ যায় না, যেমন সমস্ত লাইনের সাথে মেলে এমন উদাহরণটি মূল ফাইলটির সঠিক বাইনারি অনুলিপি তৈরি করবে।

FINDSTR "^" FILE >FILE_COPY

/ এ বিকল্পটি ফাইলনামের রঙ নির্ধারণ করে:, লাইন সংখ্যা:, এবং লাইনঅফসেট: কেবল আউটপুট। ম্যাচিং লাইনের পাঠ্যটি সর্বদা বর্তমান কনসোল রঙের সাথে আউটপুট থাকে। / এ বিকল্পটি তখনই কার্যকর হয় যখন আউটপুট সরাসরি কনসোলে প্রদর্শিত হয়। আউটপুট কোনও ফাইলে পুনঃনির্দেশিত করা বা পাইপ করা হলে / এ বিকল্পের কোনও প্রভাব নেই। আউটপুট CON এ পুনঃনির্দেশিত করা হলে বগি আচরণের বিবরণের জন্য অ্যাকিনির উত্তরে 2018-08-18 সম্পাদনাটি দেখুন ।

এক্সপিতে এক্সপি
ফিনড্রাস্ট্রে বিন্দু হিসাবে প্রদর্শিত বেশিরভাগ নিয়ন্ত্রণের অক্ষর এবং অনেকগুলি বর্ধিত এএসসিআইআই অক্ষর স্ক্রিনে বিন্দু (পিরিয়ড) হিসাবে লাইনগুলি মিলিয়ে বেশিরভাগ প্রিন্টযোগ্য নিয়ন্ত্রণের অক্ষরগুলি প্রদর্শন করে। নিম্নলিখিত নিয়ন্ত্রণের অক্ষরগুলি ব্যতিক্রম; তারা নিজেরাই প্রদর্শন করে: 0x09 ট্যাব, 0x0A লাইনফিড, 0x0B উল্লম্ব ট্যাব, 0x0 সি ফর্ম ফিড, 0x0D ক্যারিজ রিটার্ন।

এক্সপি ফিনড্রাস্ট্র অনেকগুলি বর্ধিত এএসসিআইআই অক্ষর পাশাপাশি বিন্দুতে রূপান্তর করে। এক্সপিতে বিন্দু হিসাবে প্রদর্শিত বর্ধিত ASCII অক্ষরগুলি কমান্ড লাইনে সরবরাহ করার পরে রূপান্তরিত হওয়াগুলির মতোই। দেখুন - "এক্সটেন্ডেড হওয়া ASCII রূপান্তর কমান্ড লাইন প্যারামিটার জন্য ক্যারেক্টার সীমা" অধ্যায়, পরে এই পোস্টে

নিয়ন্ত্রণের অক্ষর এবং প্রসারিত ASCII এক্সপিতে বিন্দুতে রূপান্তরিত হয় না যদি আউটপুটটি পাইপ করা হয়, কোনও ফাইলে পুনঃনির্দেশিত করা হয়, বা একটি ফোর IN () ধারাতে।

ভিস্তা এবং উইন্ডোজ 7 সর্বদা সমস্ত অক্ষরকে নিজের হিসাবে প্রদর্শন করে, বিন্দু হিসাবে কখনও না।

রিটার্ন কোড (ERRORLEVEL)

  • 0 (সাফল্য)
    • কমপক্ষে একটি ফাইলের কমপক্ষে একটি লাইনে ম্যাচটি পাওয়া গেছে।
  • 1 (ব্যর্থতা)
    • কোনও ফাইলের কোনও লাইনে কোনও মিল খুঁজে পাওয়া যায় নি।
    • /A:xxবিকল্প দ্বারা অবৈধ রঙ নির্দিষ্ট
  • 2 (ত্রুটি)
    • বেমানান বিকল্প /Lএবং /Rউভয় নির্দিষ্ট
    • নিখোঁজ যুক্তি পর /A:, /F:, /C:, /D:, অথবা/G:
    • ফাইল নির্দিষ্ট করেছে /F:fileবা /G:fileপাওয়া যায় নি
  • 255 (ত্রুটি)

অনুসন্ধানের জন্য ডেটা উত্স (উইন্ডোজ with এর সাথে পরীক্ষার ভিত্তিতে আপডেট করা হয়েছে)
ফাইন্ডস্ট্রাস্ট নিম্নলিখিত উত্সগুলির মধ্যে কেবল একটি থেকে ডেটা অনুসন্ধান করতে পারেন:

  • ফাইলের নামগুলি আর্গুমেন্ট এবং / অথবা /F:fileবিকল্পটি ব্যবহার করে নির্দিষ্ট করা হয়েছে ।

  • পুনর্নির্দেশের মাধ্যমে স্টিডিন findstr "searchString" <file

  • একটি পাইপ থেকে তথ্য প্রবাহ type file | findstr "searchString"

যুক্তি / বিকল্পগুলি পুনঃনির্দেশের চেয়ে অগ্রাধিকার নেয়, যা পাইপযুক্ত ডেটার চেয়ে অগ্রাধিকার নেয়।

ফাইলের নাম আর্গুমেন্ট এবং /F:fileএকত্রিত হতে পারে। একাধিক ফাইলের নাম যুক্তি ব্যবহার করা যেতে পারে। যদি একাধিক /F:fileবিকল্প নির্দিষ্ট করা থাকে তবে কেবলমাত্র সর্বশেষটি ব্যবহৃত হয়। ফাইল নাম আর্গুমেন্টে ওয়াইল্ড কার্ডগুলি অনুমোদিত, তবে ফাইলটির মধ্যে নির্দেশিত নয় /F:file

অনুসন্ধান স্ট্রিং উৎস (উইন্ডোজ 7 পরীক্ষার উপর ভিত্তি করে সংশোধিত) এবং অপশন মিলিত হতে পারে। একাধিক বিকল্প নির্দিষ্ট করা যেতে পারে। যদি একাধিক বিকল্প নির্দিষ্ট করা থাকে তবে কেবলমাত্র সর্বশেষটি ব্যবহৃত হয়। যদি হয় বা ব্যবহৃত হয়, তবে সমস্ত অ-বিকল্প যুক্তি অনুসন্ধানের জন্য ফাইল হিসাবে ধরে নেওয়া হয়। তাহলে তন্ন তন্ন না ব্যবহার করা হয়, তারপর প্রথম অ বিকল্প যুক্তি খোঁজের শব্দগুলির একটি স্থান বিভাজিত তালিকায় হিসাবে গণ্য হবে।
/G:file/C:string/C:string/G:file/G:file/C:string/G:file/C:string

/F:FILEবিকল্পটি ব্যবহার করার সময় ফাইলের মধ্যে ফাইলের নাম অবশ্যই উদ্ধৃত করা উচিত নয় ।
ফাইলের নামগুলিতে স্পেস এবং অন্যান্য বিশেষ অক্ষর থাকতে পারে। বেশিরভাগ কমান্ডের জন্য এই জাতীয় ফাইলের নাম উদ্ধৃত করা দরকার। তবে FINDSTR /F:files.txtবিকল্পটির জন্য ফাইলের মধ্যে ফাইলের নাম প্রয়োজন t txt অবশ্যই উদ্ধৃত করা উচিত নয়। নামটি উদ্ধৃত করা থাকলে ফাইলটি পাওয়া যাবে না।

বাউজি - সংক্ষিপ্ত 8.3 ফাইলের নামগুলি /Dএবং /Sবিকল্পগুলি ভেঙে ফেলতে পারে
সমস্ত উইন্ডোজ কমান্ডের মতো, অনুসন্ধানের জন্য ফাইলগুলি অনুসন্ধান করার জন্য FINDSTR দীর্ঘ নাম এবং সংক্ষিপ্ত 8.3 নাম দুটি মিলিয়ে নেওয়ার চেষ্টা করবে। ধরুন বর্তমান ফোল্ডারে নিম্নলিখিত অ-ফাঁকা ফাইল রয়েছে:

b1.txt
b.txt2
c.txt

নিম্নলিখিত কমান্ডটি সফলভাবে সমস্ত 3 ফাইল সন্ধান করবে:

findstr /m "^" *.txt

b.txt2মিল আছে কারণ সম্পর্কিত সংক্ষিপ্ত নামের সাথে B9F64~1.TXTমেলে। এটি অন্যান্য সমস্ত উইন্ডোজ কমান্ডের আচরণের সাথে সামঞ্জস্যপূর্ণ।

তবে /Dএবং /Sঅপশন সহ একটি বাগের ফলে নিম্নলিখিত কমান্ডগুলি কেবল সন্ধান করতে পারেb1.txt

findstr /m /d:. "^" *.txt
findstr /m /s "^" *.txt

বাগটি b.txt2খুঁজে পাওয়া থেকে বাধা দেয় এবং b.txt2সেই সাথে একই ডিরেক্টরি অনুসারে বাছাই করা সমস্ত ফাইলের নাম । এর আগে বাছাইকৃত অতিরিক্ত ফাইলগুলি a.txtপাওয়া যায়। d.txtত্রুটি শুরু হওয়ার পরে যেমন অতিরিক্ত ফাইলগুলি পরে সাজানো হয়, তেমনি মিস হয়।

অনুসন্ধান প্রতিটি ডিরেক্টরি স্বাধীনভাবে চিকিত্সা করা হয়। উদাহরণস্বরূপ, /Sবিকল্পটি পিতামাতার মধ্যে ফাইলগুলি সন্ধান করতে ব্যর্থ হওয়ার পরে চাইল্ড ফোল্ডারে সাফল্যের সাথে অনুসন্ধান শুরু করবে, তবে বাগটি বাচ্চার মধ্যে একটি ছোট ফাইলের নামটি মিস করার পরে, সেই শিশু ফোল্ডারের পরবর্তী সমস্ত ফাইলও বাদ দেওয়া হবে ।

এনটিএফএস 8.3 নাম জেনারেশন অক্ষম করে এমন কোনও মেশিনে যদি একই ফাইলের নাম তৈরি করা হয় তবে কমান্ডগুলি বাগ ফ্রি কাজ করে। অবশ্যই b.txt2পাওয়া যাবে না, তবে c.txtসঠিকভাবে পাওয়া যাবে।

সমস্ত সংক্ষিপ্ত নাম বাগটি ট্রিগার করে না। বগড আচরণের সমস্ত দৃষ্টান্ত আমি দেখেছি এমন একটি এক্সটেনশন জড়িত যা সংক্ষিপ্ত 8.3 নাম সহ 3 টি অক্ষরের চেয়ে দীর্ঘ হয় যা একটি সাধারণ নাম হিসাবে শুরু হয় যার জন্য 8.3 নাম প্রয়োজন হয় না।

এক্সপি, ভিস্তা এবং উইন্ডোজ 7 এ বাগটি নিশ্চিত হয়ে গেছে।

মুদ্রণযোগ্য নয় এমন অক্ষর এবং /Pবিকল্প বিকল্প FINDSTR নিম্নলিখিত দশমিক বাইট কোডের কোন ধারণ করে যেকোনো ফাইল এড়িয়ে যেতে কারণ: 0-7, 14-25, 27-31।
/P

অন্য একটি উপায় রাখুন, /Pবিকল্পটি কেবল এমন ফাইলগুলিকে এড়িয়ে যাবে যা মুদ্রণযোগ্য নিয়ন্ত্রণের অক্ষরগুলি ধারণ করে। নিয়ন্ত্রণের অক্ষরগুলি 31 (0x1F) এর চেয়ে কম বা সমান কোড equal FINDSTR নিম্নলিখিত নিয়ন্ত্রণ অক্ষরগুলি মুদ্রণযোগ্য হিসাবে গণ্য করে:

 8  0x08  backspace
 9  0x09  horizontal tab
10  0x0A  line feed
11  0x0B  vertical tab
12  0x0C  form feed
13  0x0D  carriage return
26  0x1A  substitute (end of text)

অন্যান্য সমস্ত কন্ট্রোল ক্যারেক্টারকে প্রিন্টযোগ্য হিসাবে বিবেচনা করা হয়, যার উপস্থিতি /Pফাইলটি এড়িয়ে যাওয়ার বিকল্পের কারণ হয়ে থাকে।

পাইপযুক্ত এবং পুনঃনির্দেশিত ইনপুট <CR><LF>সংযুক্ত থাকতে পারে
যদি ইনপুটটি পাইপ করা হয় এবং স্ট্রিমের শেষ অক্ষরটি না থাকে <LF>তবে FINDSTR স্বয়ংক্রিয়ভাবে ইনপুটটিতে সংযোজন হবে <CR><LF>। এটি এক্সপি, ভিস্তা এবং উইন্ডোজ on এ নিশ্চিত হয়ে গেছে (আমি মনে করতাম যে উইন্ডোজ পাইপটি ইনপুটটি সংশোধন করার জন্য দায়ী ছিল তবে আমি তখন থেকেই আবিষ্কার করেছি যে প্রকৃতপক্ষে এফআইএনডিআরএসটি সংশোধন করছে।)

একইভাবে ভিস্তার উপর পুনর্নির্দেশিত ইনপুটটির ক্ষেত্রেও সত্য। পুনর্নির্দেশিত ইনপুট হিসাবে ব্যবহৃত কোনও ফাইলের শেষ চরিত্রটি যদি না হয় <LF>তবে FINDSTR স্বয়ংক্রিয়ভাবে ইনপুটটিতে যুক্ত হবে <CR><LF>। তবে এক্সপি এবং উইন্ডোজ 7 পুনঃনির্দেশিত ইনপুটটিকে পরিবর্তন করে না।

এক্সপ্লোর পরিচালনা উইন্ডোতে পুনর্নির্দেশিত ইনপুটটি শেষ না হলে এক্সপ্লোর পরিচালনা উইন্ডোজ এক্সপি এবং উইন্ডোজ<LF>
on এ <LF>স্থগিত হয় X পুনঃনির্দেশিত ফাইলের শেষে পৌঁছে যায়।


পাইপড ডেটার শেষ লাইনটি যদি একটি একক অক্ষর নিয়ে থাকে তবে তা উপেক্ষা করা যেতে পারে যদি ইনপুটটি পাইপ করা হয় এবং শেষ লাইনে একটি একক অক্ষর থাকে যা অনুসরণ করে না <LF>, তবে FINDSTR সম্পূর্ণ লাইনটি উপেক্ষা করে ign

উদাহরণ - একক অক্ষর সহ প্রথম কমান্ড <LF>মিলতে ব্যর্থ হয় তবে ২ টি অক্ষর সহ দ্বিতীয় কমান্ড ঠিকঠাকভাবে কাজ করে, তৃতীয় কমান্ড যেমন একটি নতুন অক্ষর সমাপ্ত করে একটি অক্ষর রাখে।

> set /p "=x" <nul | findstr "^"

> set /p "=xx" <nul | findstr "^"
xx

> echo x| findstr "^"
x

নতুন ফাইস্টস্ট্র বাগটিতে ডসটিপস ব্যবহারকারী স্পঞ্জ বেলি রিপোর্ট করেছেন । এক্সপি, উইন্ডোজ 7 এবং উইন্ডোজ 8 এ নিশ্চিত হয়েছে V এখনও ভিস্তার সম্পর্কে শোনেনি। (পরীক্ষার জন্য আমার আর ভিস্তা নেই)।

অপশন সিনট্যাক্স
বিকল্পগুলির সাথে উভয়ই উপসর্গ করা যেতে পারে /বা -বিকল্পগুলি একক পরে /বা পরে একত্রিত হতে পারে -। তবে সংক্ষিপ্ত বিকল্প তালিকায় সর্বাধিক একটি মাল্টিচার্যাক্টর বিকল্প থাকতে পারে যেমন অফ বা এফ:, এবং মাল্টি-চরিত্রের বিকল্পটি তালিকার সর্বশেষ বিকল্প হতে হবে।

"হ্যালো" এবং "বিদায়" উভয় ক্রমে যে কোনও রেখার জন্য কেস সংবেদনশীল রেজেক্স অনুসন্ধানের প্রকাশের সমস্ত সমমানের উপায় নীচে রয়েছে

  • /i /r /c:"hello.*goodbye" /c:"goodbye.*hello"

  • -i -r -c:"hello.*goodbye" /c:"goodbye.*hello"

  • /irc:"hello.*goodbye" /c:"goodbye.*hello"


অনুসন্ধানের স্ট্রিংয়ের দৈর্ঘ্য সীমা ভিস্টায় একক অনুসন্ধান স্ট্রিংয়ের সর্বাধিক অনুমোদিত দৈর্ঘ্য 511 বাইট। যদি কোনও অনুসন্ধানের স্ট্রিং 511 ছাড়িয়ে যায় তবে ফলাফলটি FINDSTR: Search string too long.ERRORLEVEL 2 এর সাথে একটি ত্রুটি।

নিয়মিত অভিব্যক্তি অনুসন্ধান করার সময় সর্বাধিক সন্ধানের স্ট্রিংয়ের দৈর্ঘ্য 254 25 255 এবং 511 এর দৈর্ঘ্য সহ একটি নিয়মিত অভিব্যক্তি FINDSTR: Out of memoryERRORLEVEL 2 এর সাথে ত্রুটি ঘটবে A একটি নিয়মিত প্রকাশের দৈর্ঘ্য> 511 FINDSTR: Search string too long.ত্রুটির ফলস্বরূপ ।

উইন্ডোজ এক্সপিতে অনুসন্ধানের স্ট্রিংয়ের দৈর্ঘ্য স্পষ্টতই কম। ফাইন্ডস্ট্রার ত্রুটি: "অনুসন্ধানের স্ট্রিং খুব দীর্ঘ": কীভাবে "লুপ" এর মধ্যে স্ট্রিংগুলি নিষ্কাশন করতে এবং মেলে? আক্ষরিক এবং রেজেক্স উভয় অনুসন্ধানের জন্য এক্সপি সীমা 127 বাইট।

লাইন দৈর্ঘ্য সীমা
কমান্ড লাইন আর্গুমেন্ট হিসাবে বা / এফ: ফাইল ফাইলের মাধ্যমে নির্দিষ্ট করা ফাইলগুলির কোনও লাইন দৈর্ঘ্যের সীমা নেই। অনুসন্ধানগুলি 128MB ফাইলের বিরুদ্ধে সফলভাবে পরিচালিত হয়েছিল যাতে একটি << এলএফ> নেই।

পাইপযুক্ত ডেটা এবং পুনঃনির্দেশিত ইনপুট প্রতি লাইন 8191 বাইটের মধ্যে সীমাবদ্ধ। এই সীমাটি FINDSTR এর একটি "বৈশিষ্ট্য"। এটি পাইপ বা পুনঃনির্দেশের সহজাত নয়। পুনর্নির্দেশিত স্টিডিন বা পাইপযুক্ত ইনপুট ব্যবহার করে FINDSTR>> = 8 কে বাইটের কোনও লাইনের সাথে মেলে না। লাইন> = 8 কে স্টাডারে একটি ত্রুটি বার্তা উত্পন্ন করে, তবে অনুসন্ধান স্ট্রিংটি কমপক্ষে একটি ফাইলের কমপক্ষে একটি লাইনে সন্ধান পেলে ERRORLEVEL এখনও 0 হয়।

ডিফল্ট অনুসন্ধানের: আক্ষরিক বনাম নিয়মিত এক্সপ্রেশন
/C:"string" - ডিফল্টটি হল / এল আক্ষরিক। স্পষ্টভাবে / সি বিকল্পের সাথে / সি মিশ্রন করা: "স্ট্রিং" অবশ্যই কাজ করে তবে অনর্থক।

"string argument"- ডিফল্ট খুব প্রথম অনুসন্ধানের স্ট্রিংয়ের সামগ্রীর উপর নির্ভর করে। (মনে রাখবেন যে <স্পেস> সন্ধানের স্ট্রিংগুলি সীমিত করতে ব্যবহৃত হয়)) যদি প্রথম অনুসন্ধান স্ট্রিংটি একটি বৈধ নিয়মিত অভিব্যক্তি হয় যা অন্তত একটি অব্যাহত মেটা-অক্ষর ধারণ করে, তবে সমস্ত অনুসন্ধানের স্ট্রিংগুলিকে নিয়মিত এক্সপ্রেশন হিসাবে বিবেচনা করা হবে। অন্যথায় সমস্ত অনুসন্ধানের স্ট্রিংগুলিকে আক্ষরিক হিসাবে বিবেচনা করা হয়। উদাহরণস্বরূপ, "51.4 200"দুটি নিয়মিত এক্সপ্রেশন হিসাবে বিবেচিত হবে কারণ প্রথম স্ট্রিংটিতে একটি অব্যক্ত ডট রয়েছে, যেখানে "200 51.4"দুটি আক্ষরিক হিসাবে বিবেচিত হবে কারণ প্রথম স্ট্রিংয়ে কোনও মেটা-অক্ষর নেই।

/G:file- ডিফল্ট ফাইলের প্রথম খালি খালি লাইনের সামগ্রীর উপর নির্ভর করে। যদি প্রথম অনুসন্ধানের স্ট্রিংটি একটি বৈধ নিয়মিত অভিব্যক্তি হয় যা অন্তত একটি অব্যাহত মেটা-চরিত্র ধারণ করে, তবে সমস্ত অনুসন্ধানের স্ট্রিংগুলিকে নিয়মিত এক্সপ্রেশন হিসাবে বিবেচনা করা হবে। অন্যথায় সমস্ত অনুসন্ধানের স্ট্রিংগুলিকে আক্ষরিক হিসাবে বিবেচনা করা হয়।

সুপারিশ - সর্বদা স্পষ্টভাবে উল্লেখ /Lআক্ষরিক বিকল্প বা /Rযখন ব্যবহার রেগুলার এক্সপ্রেশন বিকল্প "string argument"বা /G:file

বাউজি - একাধিক আক্ষরিক অনুসন্ধানের স্ট্রিং নির্দিষ্ট করা অবিশ্বাস্য ফলাফল দিতে পারে

নিম্নলিখিত সাধারণ FINDSTR উদাহরণটি মিল থাকা সত্ত্বেও কোনও মিল খুঁজে পেতে ব্যর্থ।

echo ffffaaa|findstr /l "ffffaaa faffaffddd"

এই বাগটি উইন্ডোজ সার্ভার 2003, উইন্ডোজ এক্সপি, ভিস্তা এবং উইন্ডোজ 7 এ নিশ্চিত করা হয়েছে।

পরীক্ষার উপর ভিত্তি করে, নিম্নলিখিত সমস্ত শর্ত পূরণ হলে FINDSTR ব্যর্থ হতে পারে:

  • অনুসন্ধানটি একাধিক আক্ষরিক অনুসন্ধানের স্ট্রিং ব্যবহার করছে
  • অনুসন্ধানের স্ট্রিংগুলি বিভিন্ন দৈর্ঘ্যের
  • একটি সংক্ষিপ্ত অনুসন্ধান স্ট্রিংটিতে দীর্ঘতর অনুসন্ধানের স্ট্রিং সহ কিছু পরিমাণ ওভারল্যাপ রয়েছে
  • অনুসন্ধান কেস সংবেদনশীল (কোনও /Iবিকল্প নেই)

প্রতিটি ব্যর্থতার মধ্যে আমি দেখেছি, এটি সর্বদা সংক্ষিপ্ত অনুসন্ধান স্ট্রিংগুলির মধ্যে একটি যা ব্যর্থ হয়।

আরও তথ্যের জন্য দেখুন কেন একাধিক আক্ষরিক অনুসন্ধানের স্ট্রিং সহ এই FINDSTR উদাহরণটি কোনও মিল খুঁজে পাচ্ছে না?

কমান্ড লাইনের আর্গুমেন্টের মধ্যে উদ্ধৃতি এবং ব্যাকস্ল্যাসগুলি
দ্রষ্টব্য - ব্যবহারকারী এমসির এনডির মন্তব্যগুলি এই বিভাগের জন্য প্রকৃত ভয়াবহ জটিল নিয়মগুলি প্রতিফলিত করে। জড়িত রয়েছে 3 স্বতন্ত্র পার্সিং পর্যায়ক্রমে:

  • প্রথম সেমিডি.এক্স.কে কিছু উদ্ধৃতি ^ "হিসাবে পালাতে হতে পারে (প্রকৃতপক্ষে FINDSTR এর সাথে কিছুই করার নেই)
  • পরবর্তী FINDSTR ২০০৮- এর পূর্বের এমএস সি / সি ++ আর্গুমেন্ট পার্সার ব্যবহার করে, এতে "এবং for
  • আর্গুমেন্ট পার্সার শেষ হওয়ার পরে, FINDSTR অতিরিক্তভাবে আচরণ করে \ তারপরে একটি আলফা-সংখ্যাসূচক অক্ষরকে আক্ষরিক হিসাবে চিহ্নিত করে, তবে escape ন্যূন-আলফা-সংখ্যাসূচক চরিত্রটিকে একটি পালানোর চরিত্র হিসাবে অনুসরণ করে

এই হাইলাইট করা অংশটির অবশিষ্টাংশ 100% সঠিক নয়। এটি অনেক পরিস্থিতিতে গাইড হিসাবে কাজ করতে পারে তবে সম্পূর্ণ বোঝার জন্য উপরের নিয়মগুলি প্রয়োজন।

কমান্ড লাইনের সন্ধানের স্ট্রিংয়ের মধ্যে রেকর্ডিং কোট কমান্ড লাইনের সন্ধানের স্ট্রিংয়ের
মধ্যে উদ্ধৃতি অবশ্যই ব্যাকস্ল্যাশের মতো এড়াতে হবে \"। এটি আক্ষরিক এবং রেজেক্স অনুসন্ধান উভয় স্ট্রিংয়ের ক্ষেত্রেই সত্য। এক্সপি, ভিস্তা এবং উইন্ডোজ 7 এ এই তথ্যটি নিশ্চিত করা হয়েছে।

দ্রষ্টব্য: সিএমডি.এক্সইএস পার্সারটির জন্য উদ্ধৃতিটি এড়ানো দরকার হতে পারে, তবে এটির সাথে ফিনড্রাস্ট্রের কোনও সম্পর্ক নেই। উদাহরণস্বরূপ, একক উদ্ধৃতি অনুসন্ধান করতে আপনি ব্যবহার করতে পারেন:

FINDSTR \^" file && echo found || echo not found

আক্ষরিক অনুসন্ধানের স্ট্রিংয়ের মধ্যে কমান্ড লাইনের আক্ষরিক অনুসন্ধানের স্ট্রিংগুলির মধ্যে
ব্যাকস্ল্যাশ থেকে বেরিয়ে আসা সাধারণত \বা হিসাবে হিসাবে প্রতিনিধিত্ব করা যেতে পারে \\। তারা সাধারণত সমতুল্য। (ভিস্টায় এমন অস্বাভাবিক ঘটনা ঘটতে পারে যেখানে ব্যাকস্ল্যাশ সবসময় এড়ানো উচিত, তবে আমার কাছে পরীক্ষার জন্য ভিস্তার মেশিন আর নেই)

তবে কয়েকটি বিশেষ মামলা রয়েছে:

পরপর ব্যাকস্ল্যাশগুলি অনুসন্ধান করার সময়, শেষ ব্যতীত সমস্তগুলি অবশ্যই পালাতে হবে। শেষ ব্যাকস্ল্যাশ optionচ্ছিকভাবে পালাতে পারে।

  • \\যেমন কোডেড করা যেতে পারে \\\বা\\\\
  • \\\যেমন কোডেড করা যেতে পারে \\\\\বা\\\\\\

উদ্ধৃতিটি উদ্ভট হওয়ার আগে এক বা একাধিক ব্যাকস্ল্যাশ অনুসন্ধান করা। লজিক পরামর্শ দিবে যে উদ্ধৃতিটি অবশ্যই পালাতে হবে, এবং নেতৃস্থানীয় ব্যাকস্ল্যাশগুলির প্রত্যেককে পালাতে হবে, তবে এটি কার্যকর হয় না! পরিবর্তে, নেতৃস্থানীয় ব্যাকস্ল্যাশগুলির প্রত্যেককে অবশ্যই ডাবল পলায়ন করতে হবে, এবং উদ্ধৃতিটি সাধারণত চালিয়ে যেতে হবে:

  • \" হিসাবে কোড করা আবশ্যক \\\\\"
  • \\" হিসাবে কোড করা আবশ্যক \\\\\\\\\"

পূর্বে উল্লিখিত হিসাবে, এক বা একাধিক অব্যাহতিপ্রাপ্ত উদ্ধৃতিগুলির ^জন্য সিএমডি পার্সারটি সহ পালানোর প্রয়োজন হতে পারে

এই বিভাগের তথ্যটি এক্সপি এবং উইন্ডোজ 7 এ নিশ্চিত করা হয়েছে।

কমান্ড লাইন রেজেক্স অনুসন্ধানের স্ট্রিংয়ের মধ্যে ব্যাকস্ল্যাশ ছেড়ে যাওয়া

  • শুধুমাত্র ভিস্তা: একটি রেজেজে ব্যাকস্ল্যাশ অবশ্যই ডাবল পলায়নের মতো হতে হবে \\\\, না হলে অন্যরকম অক্ষর শ্রেণির মধ্যে একক পালাতে হবে [\\]

  • এক্সপি এবং উইন্ডোজ 7: একটি রেগেক্সে ব্যাকস্ল্যাশ সর্বদা হিসাবে প্রতিনিধিত্ব করা যেতে পারে [\\]। এটি সাধারণত হিসাবে প্রতিনিধিত্ব করা যেতে পারে \\। তবে ব্যাকস্ল্যাশটি যদি একটি পালিয়ে থাকা উদ্ধৃতিটির আগে থাকে তবে এটি কখনই কার্যকর হয় না।

    একটি পালানো উদ্ধৃতি দেওয়ার আগে এক বা একাধিক ব্যাকস্ল্যাশগুলি হয় দ্বিগুণ পালাতে হবে, অন্যথায় কোড করা উচিত [\\]

    • \"যেমন কোডেড করা হতে পারে \\\\\"বা[\\]\"
    • \\"যেমন কোডেড করা হতে পারে \\\\\\\\\"বা [\\][\\]\"বা\\[\\]\"

/ জি-র মধ্যে
কোট এবং ব্যাকস্ল্যাশ ছেড়ে যাওয়া: ফাইলের আক্ষরিক অনুসন্ধানের স্ট্রিং / জি দ্বারা নির্দিষ্ট আক্ষরিক অনুসন্ধান স্ট্রিং ফাইলের মধ্যে স্ট্যান্ডেলোন কোটস এবং ব্যাকস্ল্যাশগুলি এড়ানোর দরকার হয় না, তবে তারা হতে পারে।

"এবং \"সমতুল্য।

\এবং \\সমতুল্য।

যদি উদ্দেশ্যটি \\ সন্ধান করতে হয় তবে কমপক্ষে নেতৃস্থানীয় ব্যাকস্ল্যাশ এড়াতে হবে। উভয় \\\এবং \\\\কাজ।

যদি উদ্দেশ্যটি find "অনুসন্ধান করা হয়, তবে কমপক্ষে নেতৃস্থানীয় ব্যাকস্ল্যাশ এড়াতে হবে। \\"এবং উভয়ই \\\"কাজ করুন।

/ জি-এর মধ্যেই উদ্ধৃতি এবং ব্যাকস্ল্যাশ ছেড়ে যাওয়া: ফাইলের রেজেক্স অনুসন্ধানের স্ট্রিং
এটি এমন এক ক্ষেত্রে যেখানে ডকুমেন্টের ভিত্তিতে অব্যাহতি সিক্যুয়েন্সগুলি প্রত্যাশা অনুযায়ী কাজ করে। উদ্ধৃতিটি কোনও রেজেক্স মেটাচার্যাক্টর নয়, সুতরাং এড়াতে হবে না (তবে হতে পারে)। ব্যাকস্ল্যাশ হ'ল একটি রেজেক্স মেটাচার্যাক্টর, সুতরাং এটি এড়াতে হবে।

কমান্ড লাইন প্যারামিটারগুলির জন্য অক্ষরের সীমা - প্রসারিত ASCII রূপান্তর
নাল অক্ষর (0x00) কমান্ড লাইনের কোনও স্ট্রিংয়ে উপস্থিত হতে পারে না। অন্য কোনও একক বাইট অক্ষর স্ট্রিং (0x01 - 0xFF) এ উপস্থিত হতে পারে। তবে, FINDSTR কমান্ড লাইন প্যারামিটারের মধ্যে পাওয়া অনেকগুলি বর্ধিত ASCII অক্ষরকে অন্য অক্ষরে রূপান্তর করে। এটি দুটি উপায়ে একটি বড় প্রভাব ফেলে:

1) কমান্ড লাইনে অনুসন্ধানের স্ট্রিং হিসাবে ব্যবহৃত হলে অনেকগুলি বর্ধিত ASCII অক্ষর তাদের সাথে মেলে না। আক্ষরিক এবং রেজেক্স অনুসন্ধানগুলির জন্য এই সীমাবদ্ধতা একই। যদি কোনও অনুসন্ধানের স্ট্রিংয়ে অবশ্যই বর্ধিত ASCII থাকতে পারে তবে তার /G:FILEপরিবর্তে বিকল্পটি ব্যবহার করা উচিত।

2) নামটি প্রসারিত ASCII অক্ষর রয়েছে এবং ফাইলটির নাম কমান্ড লাইনে নির্দিষ্ট করা থাকলে ফাইল খুঁজে পেতে ব্যর্থ হতে পারে I যদি অনুসন্ধান করা কোনও ফাইলের নামে প্রসারিত ASCII থাকে, তবে /F:FILEপরিবর্তে বিকল্পটি ব্যবহার করা উচিত।

এফআইএনডিআরএসটি কমান্ড লাইন স্ট্রিংগুলিতে সম্পাদিত সম্প্রসারিত ASCII অক্ষর রূপান্তরগুলির একটি সম্পূর্ণ তালিকা এখানে রয়েছে। প্রতিটি অক্ষর দশমিক বাইট কোড মান হিসাবে প্রতিনিধিত্ব করা হয়। প্রথম কোডটি কমান্ড লাইনে সরবরাহিত অক্ষরকে উপস্থাপন করে এবং দ্বিতীয় কোডটি রূপান্তরিত চরিত্রটিকে উপস্থাপন করে। দ্রষ্টব্য - এই তালিকাটি মার্কিন মেশিনে সংকলিত হয়েছিল। অন্যান্য ভাষার এই তালিকাতে কী প্রভাব ফেলতে পারে তা আমি জানি না।

158 treated as 080     199 treated as 221     226 treated as 071
169 treated as 170     200 treated as 043     227 treated as 112
176 treated as 221     201 treated as 043     228 treated as 083
177 treated as 221     202 treated as 045     229 treated as 115
178 treated as 221     203 treated as 045     231 treated as 116
179 treated as 221     204 treated as 221     232 treated as 070
180 treated as 221     205 treated as 045     233 treated as 084
181 treated as 221     206 treated as 043     234 treated as 079
182 treated as 221     207 treated as 045     235 treated as 100
183 treated as 043     208 treated as 045     236 treated as 056
184 treated as 043     209 treated as 045     237 treated as 102
185 treated as 221     210 treated as 045     238 treated as 101
186 treated as 221     211 treated as 043     239 treated as 110
187 treated as 043     212 treated as 043     240 treated as 061
188 treated as 043     213 treated as 043     242 treated as 061
189 treated as 043     214 treated as 043     243 treated as 061
190 treated as 043     215 treated as 043     244 treated as 040
191 treated as 043     216 treated as 043     245 treated as 041
192 treated as 043     217 treated as 043     247 treated as 126
193 treated as 045     218 treated as 043     249 treated as 250
194 treated as 045     219 treated as 221     251 treated as 118
195 treated as 043     220 treated as 095     252 treated as 110
196 treated as 045     222 treated as 221     254 treated as 221
197 treated as 043     223 treated as 095
198 treated as 221     224 treated as 097

উপরের তালিকায় নেই এমন কোনও চরিত্র> 0 <CR>এবং নিজের সাথে </ i> সহ হিসাবে বিবেচিত হবে LF>। বিজোড় চরিত্রগুলিকে পছন্দ করার মতো <CR>এবং অন্তর্ভুক্ত করার সহজ উপায় <LF>হ'ল এটিকে পরিবেশের পরিবর্তনশীল করে তোলা এবং কমান্ড লাইন আর্গুমেন্টের মধ্যে বিলম্বিত সম্প্রসারণ ব্যবহার করা।

/ জি: ফাইল এবং / এফ দ্বারা নির্দিষ্ট ফাইলগুলিতে স্ট্রিংগুলির জন্য অক্ষরের সীমা: ফাইল ফাইলগুলি
নুল (0x00) অক্ষরটি ফাইলটিতে উপস্থিত হতে পারে তবে এটি সি স্ট্রিং টার্মিনেটরের মতো কাজ করে। নুল চরিত্রের পরে যে কোনও অক্ষরকে আলাদা স্ট্রিং হিসাবে বিবেচনা করা হয় যেন তারা অন্য লাইনে রয়েছে।

<CR>এবং <LF>অক্ষর লাইন terminators যে একটি স্ট্রিং বিনষ্ট, এবং স্ট্রিং অন্তর্ভুক্ত করা হয় না যেমন চিকিত্সা করা হয়।

অন্যান্য সমস্ত একক বাইট অক্ষর একটি স্ট্রিং মধ্যে নিখুঁত অন্তর্ভুক্ত করা হয়।

ইউনিকোড ফাইলগুলি অনুসন্ধান করা
FINDSTR সঠিকভাবে সর্বাধিক ইউনিকোড (ইউটিএফ -16, ইউটিএফ-16 এলই, ইউটিএফ-16 বিই, ইউটিএফ -32) অনুসন্ধান করতে পারে না কারণ এটি নুল বাইটগুলি অনুসন্ধান করতে পারে না এবং ইউনিকোডে সাধারণত অনেকগুলি নুল বাইট থাকে।

তবে, টিওয়াইপি কমান্ডটি ইউটিএফ -১LE এলএকে বিওএম-এর সাথে একক বাইট অক্ষর সংকেতে রূপান্তরিত করে, সুতরাং নীচের মতো একটি কমান্ড বিওএমের সাথে ইউটিএফ -১ 16 এলএ নিয়ে কাজ করবে।

type unicode.txt|findstr "search"

নোট করুন যে ইউনিকোড কোড পয়েন্টগুলি আপনার সক্রিয় কোড পৃষ্ঠা দ্বারা সমর্থিত নয় তা ?অক্ষরে রূপান্তরিত হবে ।

ইউটিএফ -8 অনুসন্ধান করা সম্ভব যতক্ষণ না আপনার অনুসন্ধানের স্ট্রিংয়ে কেবলমাত্র এএসসিআইআই রয়েছে। তবে, কোনও মাল্টি-বাইট UTF-8 টি অক্ষরের কনসোল আউটপুট সঠিক হবে না। আপনি যদি আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করেন তবে ফলাফলটি সঠিকভাবে এনকোডেড ইউটিএফ -8 হবে। মনে রাখবেন যে যদি ইউটিএফ -8 ফাইলটিতে একটি বিওএম থাকে, তবে বিওএমটিকে প্রথম লাইনের অংশ হিসাবে বিবেচনা করা হবে, যা কোনও লাইনের শুরুর সাথে মিলে এমন কোনও অনুসন্ধান ফেলে দিতে পারে।

আপনি যদি নিজের অনুসন্ধান স্ট্রিংটি কোনও ইউটিএফ -8 এনকোডেড অনুসন্ধান ফাইলে রাখেন (বিওএম ছাড়াই) এবং / জি বিকল্পটি ব্যবহার করেন তবে মাল্টি-বাইট ইউটিএফ -8 অক্ষর অনুসন্ধান করা সম্ভব।

লাইনের
শেষের শেষে FINDSTR প্রতি <LF> এর পরপরই লাইনগুলি বিভক্ত করে। <CR> এর উপস্থিতি বা অনুপস্থিতির লাইন ব্রেকগুলিতে কোনও প্রভাব নেই।

লাইন বিরতিগুলি জুড়ে অনুসন্ধান করা
প্রত্যাশা অনুযায়ী, .রেজেক্স মেটাক্রেটার <CR> বা <LF> এর সাথে মেলে না। কমান্ড লাইন অনুসন্ধানের স্ট্রিংটি ব্যবহার করে একটি লাইন বিরতিতে অনুসন্ধান করা সম্ভব। <CR> এবং <LF> অক্ষর দুটিই সুস্পষ্টভাবে মিলে যেতে হবে। যদি কোনও বহু-লাইন মিল পাওয়া যায়, তবে ম্যাচের প্রথম লাইনটিই মুদ্রিত হয়। FINDSTR এর পরে উত্সের দ্বিতীয় লাইনে দ্বিগুণ হয়ে আবার অনুসন্ধান শুরু করে - "সামনের দিকে তাকান" প্রকারের বৈশিষ্ট্যটি সাজান।

অনুমান করুন পাঠ্য। টিএক্সটি-তে এই বিষয়গুলি রয়েছে (ইউনিক্স বা উইন্ডোজ স্টাইল হতে পারে)

A
A
A
B
A
A

তারপরে এই স্ক্রিপ্টটি

@echo off
setlocal
::Define LF variable containing a linefeed (0x0A)
set LF=^


::Above 2 blank lines are critical - do not remove

::Define CR variable containing a carriage return (0x0D)
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"

setlocal enableDelayedExpansion
::regex "!CR!*!LF!" will match both Unix and Windows style End-Of-Line
findstr /n /r /c:"A!CR!*!LF!A" TEST.TXT

এই ফলাফল দেয়

1:A
2:A
5:A

লাইন বিরতিগুলি জুড়ে / জি: ফাইল ব্যবহার করে অনুসন্ধানটি অপ্রচলিত কারণ <CRCR বা <LF> এর সাথে মিলানোর একমাত্র উপায় হ'ল ইওএল অক্ষরগুলিকে স্যান্ডউইচ করে এমন একটি রেইগেক্স অক্ষর শ্রেণির পরিসীমা এক্সপ্রেশন via

  • [<TAB>-<0x0B>] <LF> এর সাথে মেলে তবে এটি <TAB> এবং <0x0B> এর সাথেও মেলে

  • [<0x0C>-!] <CR> মেলে তবে এটি <0x0C> এবং এর সাথেও মেলে!

    দ্রষ্টব্য - উপরেরগুলি রেজেক্স বাইট স্ট্রিমের প্রতীকী উপস্থাপনা কারণ আমি গ্রাফিকালি অক্ষরগুলি উপস্থাপন করতে পারি না।

উত্তর নীচের অংশ 2 অবিরত ...


46
অসামান্য সম্পূর্ণতা। ইন্টারনেটে কেবল সমস্ত উত্তর যদি এই রকম হয়।
মাইক ভাইয়েনস

1
আমরা Q141344 এবং ফাইন্ডস্টারaddpath.bat থেকে একটি সমস্যার মুখোমুখি হয়েছি , যা উপরে উল্লিখিত উইন 7 হ্যাঙ্গিং সমস্যার সাথে সম্পর্কিত হতে পারে। আমি যার যার আগ্রহের জন্য এটি চেষ্টা করে দেখার জন্য একটি চ্যাট রুম তৈরি করেছি: chat.stackoverflow.com/rooms/13177/…
ম্যাট উইলকি

2
সম্পাদনা - এক্সপিতে বিন্দু হিসাবে নিয়ন্ত্রণ অক্ষরের বর্ণনামূলক প্রদর্শন display বগড /Sএবং নথি /D8.3 ফাইলের নাম থেকে স্ট্রিমিং বিকল্পগুলি নথিভুক্ত করা হয়েছে ।
dbenham

1
সম্পাদনা - 1) / এফ দ্বারা নির্দিষ্ট করা ফাইলের মধ্যে ফাইলের নাম: ফাইল ফাইল অবশ্যই উদ্ধৃত করা উচিত নয়। 2) প্রসারিত ASCII অক্ষরগুলির রূপান্তর কমান্ড লাইনে সরবরাহ করা হলে অনুসন্ধানের স্ট্রিং এবং ফাইলের নাম উভয়কেই প্রভাবিত করে।
dbenham

1
সম্পাদনা - যুক্ত করা বাগ যেখানে পাইপযুক্ত <LF>
ইনপুটটির

64

উপরের অংশটি থেকে উত্তর অবিরত ছিল - আমি 30,000 অক্ষরের উত্তর সীমাতে চলে এসেছি :-(

সীমিত নিয়মিত এক্সপ্রেশন (রেজেক্স)
নিয়মিত অভিব্যক্তিগুলির জন্য সমর্থন FINDSTR সমর্থন অত্যন্ত সীমাবদ্ধ। যদি এটি হেল্প ডকুমেন্টেশনে না থাকে তবে এটি সমর্থিত নয়।

এর বাইরে, রেগেক্স এক্সপ্রেশনগুলি সমর্থিত যা সম্পূর্ণ অ-মানক পদ্ধতিতে প্রয়োগ করা হয়, ফলাফলগুলি ভিন্ন হতে পারে তবে গ্রেপ বা পার্লের মতো কিছু থেকে আসা আশা করা যায়।

রেজেক্স লাইন অবস্থান অ্যাঙ্করগুলি
^ input এবং $ ইনপুট স্ট্রিমের শুরুর সাথে সাথে <LF> অনুসরণ করে যে কোনও অবস্থানের সাথে মেলে। যেহেতু FINDSTR <LF> এর পরে লাইনগুলিও ভেঙে দেয়, তাই "^" এর একটি সরল রেজেক্স সর্বদা একটি ফাইলের মধ্যে, এমনকি একটি বাইনারি ফাইলের মধ্যে সমস্ত লাইন মেলে।

$<CR> এর পূর্বের যে কোনও অবস্থানের সাথে সাথে মেলে। এর অর্থ হ'ল একটি রেজেক্স অনুসন্ধান স্ট্রিং $কোনও ইউনিক্স স্টাইলের পাঠ্য ফাইলের মধ্যে কোনও লাইন মিলবে না এবং এটি <CR> <LF> এর EOL চিহ্নিতকারী অনুপস্থিত থাকলে এটি কোনও উইন্ডোজ পাঠ্য ফাইলের শেষ লাইনের সাথে মেলে না।

দ্রষ্টব্য - পূর্বে আলোচনা হিসাবে, পাইপড এবং পুনর্নির্দেশিত ইনপুট FINDSTR এ <CR><LF>সংযুক্ত থাকতে পারে যা উত্সটিতে নেই । স্পষ্টতই এটি ব্যবহার করে এমন একটি রেজেক্স অনুসন্ধানকে প্রভাবিত করতে পারে $

অক্ষরের সাথে আগে ^বা পরে থাকা কোনও অনুসন্ধানের স্ট্রিং $সবসময় কোনও মিল খুঁজে পেতে ব্যর্থ হবে।

অবস্থানগত বিকল্পগুলি / বি / ই / এক্স
অবস্থানগত বিকল্পগুলি একইভাবে কাজ করে ^এবং $বাদে তারা আক্ষরিক অনুসন্ধানের স্ট্রিংয়ের জন্যও কাজ করে।

^রিজেক্স অনুসন্ধান স্ট্রিংয়ের শুরুতে / বি একই কাজ করে ।

/ ই $একটি রেগেক্স অনুসন্ধান স্ট্রিংয়ের শেষে যেমন কাজ করে ।

/ এক্স ^শুরুতে এবং $রেইগেক্স অনুসন্ধান স্ট্রিংয়ের শেষে উভয়ই সমান কাজ করে ।


\<রেজেক্স শব্দের সীমানা অবশ্যই রেগেক্সের প্রথম শব্দ হতে হবে। অন্য কোনও অক্ষর আগে থাকলে রেজেক্স কোনও কিছুর সাথে মিলবে না। \<হয় ইনপুটটির একেবারে শুরু, কোনও লাইনের শুরু (অবিলম্বে <LF> অনুসরণকারী অবস্থান) অথবা কোনও "অ-শব্দ" চরিত্র অনুসরণ করার সাথে সাথেই অবস্থানটি মিলছে। পরবর্তী অক্ষরটি "শব্দ" চরিত্রের হওয়া দরকার না।

\>রেইজেক্সের অবশ্যই শেষ পর্ব হতে হবে। রেজেক্স অন্য কোনও অক্ষর অনুসরণ করে কিছু মিলবে না। \>হয় ইনপুট এর শেষের সাথে মিলিত হয়, <সিআরআর> এর সাথে সাথে অবিলম্বে অবস্থান, বা অবিলম্বে কোনও "শব্দহীন" অক্ষরের পূর্ববর্তী অবস্থান। পূর্ববর্তী অক্ষরটি "শব্দ" চরিত্রের হওয়া দরকার না।

এখানে দশমিক বাইট কোড হিসাবে উপস্থাপিত "অ-শব্দ" অক্ষরের একটি সম্পূর্ণ তালিকা রয়েছে। দ্রষ্টব্য - এই তালিকাটি মার্কিন মেশিনে সংকলিত হয়েছিল। অন্যান্য ভাষার এই তালিকাতে কী প্রভাব ফেলতে পারে তা আমি জানি না।

001   028   063   179   204   230
002   029   064   180   205   231
003   030   091   181   206   232
004   031   092   182   207   233
005   032   093   183   208   234
006   033   094   184   209   235
007   034   096   185   210   236
008   035   123   186   211   237
009   036   124   187   212   238
011   037   125   188   213   239
012   038   126   189   214   240
014   039   127   190   215   241
015   040   155   191   216   242
016   041   156   192   217   243
017   042   157   193   218   244
018   043   158   194   219   245
019   044   168   195   220   246
020   045   169   196   221   247
021   046   170   197   222   248
022   047   173   198   223   249
023   058   174   199   224   250
024   059   175   200   226   251
025   060   176   201   227   254
026   061   177   202   228   255
027   062   178   203   229

রেজেক্স অক্ষর শ্রেণীর ব্যাপ্তি [xy]
অক্ষর শ্রেণীর ব্যাপ্তি প্রত্যাশার মতো কাজ করে না। এই প্রশ্নটি দেখুন: কেন Findstr মামলা সঠিকভাবে পরিচালনা করে না (কিছু পরিস্থিতিতে)? , এই উত্তরের সাথে: https://stackoverflow.com/a/8767815/1012053

সমস্যাটি হল FINDSTR অক্ষরগুলি তাদের বাইট কোড মান দ্বারা আবদ্ধ করে না (সাধারণত ASCII কোড হিসাবে ভাবা হয়, তবে ASCII কেবল 0x00 - 0x7F থেকে সংজ্ঞায়িত করা হয়)। বেশিরভাগ রেজেক্স বাস্তবায়নগুলি [এজেড] কে সমস্ত বড় হাতের অক্ষর হিসাবে বিবেচনা করবে English তবে FINDSTR একটি কোলেশন সিকোয়েন্স ব্যবহার করে যা প্রায় SORT কীভাবে কাজ করে তার সাথে মিল রাখে। সুতরাং [এজেড] সম্পূর্ণ ইংরেজী বর্ণমালা, উপরের এবং নিম্ন উভয় ক্ষেত্রে ("ক" ব্যতীত) পাশাপাশি ডায়াক্রিটিক্যালস সহ অ-ইংরাজী অ্যালফা অক্ষর অন্তর্ভুক্ত করে।

নীচে রেগেক্স অক্ষর শ্রেণির ব্যাপ্তি স্থাপন করতে FINDSTR দ্বারা ব্যবহৃত কোলেশন ক্রম অনুসারে বাছাই করা FINDSTR দ্বারা সমর্থিত সমস্ত অক্ষরের সম্পূর্ণ তালিকা রয়েছে। অক্ষরগুলি তাদের দশমিক বাইট কোড মান হিসাবে উপস্থাপিত হয়। আমি বিশ্বাস করি কোড কোড পৃষ্ঠা 437 ব্যবহার করে অক্ষরগুলি যদি দেখা হয় তবে কোলেশন ক্রমটি সর্বাধিক উপলব্ধি করে। নোট - এই তালিকাটি মার্কিন মেশিনে সংকলিত হয়েছিল। অন্যান্য ভাষার এই তালিকাতে কী প্রভাব ফেলতে পারে তা আমি জানি না।

001
002
003
004
005
006
007
008
014
015
016
017
018           
019
020
021
022
023
024
025
026
027
028
029
030
031
127
039
045
032
255
009
010
011
012
013
033
034
035
036
037
038
040
041
042
044
046
047
058
059
063
064
091
092
093
094
095
096
123
124
125
126
173
168
155
156
157
158
043
249
060
061
062
241
174
175
246
251
239
247
240
243
242
169
244
245
254
196
205
179
186
218
213
214
201
191
184
183
187
192
212
211
200
217
190
189
188
195
198
199
204
180
181
182
185
194
209
210
203
193
207
208
202
197
216
215
206
223
220
221
222
219
176
177
178
170
248
230
250
048
172
171
049
050
253
051
052
053
054
055
056
057
236
097
065
166
160
133
131
132
142
134
143
145
146
098
066
099
067
135
128
100
068
101
069
130
144
138
136
137
102
070
159
103
071
104
072
105
073
161
141
140
139
106
074
107
075
108
076
109
077
110
252
078
164
165
111
079
167
162
149
147
148
153
112
080
113
081
114
082
115
083
225
116
084
117
085
163
151
150
129
154
118
086
119
087
120
088
121
089
152
122
090
224
226
235
238
233
227
229
228
231
237
232
234

রেজেক্স চরিত্রের শ্রেণির মেয়াদ সীমা এবং BUG
কেবল রেগেক্সের মধ্যে সর্বাধিক 15 অক্ষর শ্রেণির শর্তাদির মধ্যে সীমাবদ্ধ নয়, এটি সীমা অতিক্রম করার প্রয়াসকে সঠিকভাবে পরিচালনা করতে ব্যর্থ হয়। 16 বা ততোধিক অক্ষর শ্রেণি শর্তাদি ব্যবহার করে একটি ইন্টারেক্টিভ উইন্ডোজ পপ আপের ফলাফল হিসাবে বলা হয়েছে "ফাইন্ড স্ট্রিং (কিউজিআরপি) ইউটিলিটি একটি সমস্যার মুখোমুখি হয়েছে এবং এটি বন্ধ হওয়া দরকার। আমরা অসুবিধার জন্য দুঃখিত" " মেসেজের পাঠ্যটি উইন্ডোজ সংস্করণের উপর নির্ভর করে কিছুটা পরিবর্তিত হয়। এখানে FINDSTR এর একটি উদাহরণ যা ব্যর্থ হবে:

echo 01234567890123456|findstr [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

এই বাগটি এখানে ডসটিপস ব্যবহারকারী জুডাগো দ্বারা প্রতিবেদন করা হয়েছে । এটি এক্সপি, ভিস্তা এবং উইন্ডোজ 7 এ নিশ্চিত করা হয়েছে।

রেজেেক্স অনুসন্ধানগুলি ব্যর্থ হয় (এবং অনির্দিষ্টকালের জন্য ঝুলতে পারে) যদি তারা বাইট কোড 0xFF (দশমিক 255)
অন্তর্ভুক্ত করে তবে যে কোনও রেইগেক্স অনুসন্ধান যা বাইট কোড 0xFF (দশমিক 255) সহ ব্যর্থ হবে। এটি ব্যর্থ হয় যদি বাইট কোড 0xFF সরাসরি অন্তর্ভুক্ত করা হয়, বা যদি এটি বর্ণনামূলক শ্রেণির সীমার মধ্যে অন্তর্ভুক্ত থাকে। মনে রাখবেন যে FINDSTR অক্ষর শ্রেণি রেঞ্জগুলি বাইট কোড মানের উপর ভিত্তি করে অক্ষরগুলি কোলেট করে না। অক্ষর এবং অক্ষরগুলির <0xFF>মধ্যে কোলেশন ক্রমের তুলনায় তুলনামূলকভাবে প্রাথমিকভাবে উপস্থিত হয় । সুতরাং যে কোনও অক্ষর শ্রেণীর পরিসীমা উভয়ই অন্তর্ভুক্ত এবং ব্যর্থ হবে।<space><tab><space><tab>

উইন্ডোজ সংস্করণের উপর নির্ভর করে সঠিক আচরণটি কিছুটা পরিবর্তিত হয়। উইন্ডোজ 7 অনির্দিষ্টকালের জন্য স্তব্ধ হয়ে থাকে যদি 0xFF অন্তর্ভুক্ত থাকে। এক্সপি হ্যাং করে না, তবে এটি কোনও ম্যাচ সন্ধান করতে সর্বদা ব্যর্থ হয় এবং মাঝে মাঝে নিম্নলিখিত ত্রুটি বার্তাটি প্রিন্ট করে - "প্রক্রিয়াটি অস্তিত্বহীন পাইপে লেখার চেষ্টা করেছিল" "

আমার আর কোনও ভিস্তা মেশিনে অ্যাক্সেস নেই, তাই আমি ভিস্তার উপর পরীক্ষা করতে পারিনি।

Regex বাগ: .এবং [^anySet]ফাইল-এর-শেষের সাথে মেলে উঠতে পারে
রেজেক্স .মেটা-চরিত্রটি কেবল <CR>বা ব্যতীত অন্য কোনও চরিত্রের সাথে মেলে <LF>। একটি বাগ রয়েছে যা ফাইলের শেষ লাইনটি দ্বারা <CR>বা দ্বারা শেষ না করা হলে এটি ফাইলের শেষের সাথে মেলাতে দেয় <LF>। তবে, .খালি ফাইলটির সাথে মেলে না।

উদাহরণস্বরূপ, "টেস্ট.টেক্সট" নামের একটি ফাইল একক লাইন xসমাপ্ত করে <CR>বা শেষ না করেই <LF>মিলবে:

findstr /r x......... test.txt

এই বাগটি এক্সপি এবং উইন 7 এ নিশ্চিত করা হয়েছে।

নেতিবাচক চরিত্রের সেটগুলির ক্ষেত্রেও এটি একই সত্য বলে মনে হচ্ছে। এর মতো কিছু [^abc]মিলবে ফাইলের শেষের সাথে। ইতিবাচক চরিত্রের সেটগুলি ঠিক [abc]কাজ করে বলে মনে হচ্ছে। আমি এটি কেবল উইন 7-তে পরীক্ষা করেছি।


1
ফাইন্ডস্টার বৃহত্তর ফাইলগুলির সাথে বগিও করছে। ফাইলগুলি> 2 জিবি ফাইন্ডস্টারে হ্যাং করতে পারে। এটা সবসময় হয় না। বাগটি নিশ্চিত করতে গিয়ে আমি একটি ফাইল অনুসন্ধান করেছি যা ২.৩ গিগাবাইট যা ঝুলেনি। এটি শুধুমাত্র একটি ফাইল অনুসন্ধান করলেও এটি স্তব্ধ হয়ে যায়। ওয়ার্কআরউন্ডটি এর আউটপুটটি পাইপ typeকরা findstr
হতাশ

এটি সম্ভবত সার্থকভাবে উল্লেখযোগ্যভাবে উল্লেখ করা যা findstrএকাধিক /c:অনুসন্ধানের স্ট্রিংগুলিকে সমর্থন করে। আমি জানি আপনার উত্তরগুলি এটি প্রদর্শন করে। তবে এটি এমন কিছু যা নথিভুক্ত নয়; এবং findstrকয়েক বছর এটি ব্যবহার না করে বৈশিষ্ট্যটি জানতে পেরে আমি বেশ অবাক হয়েছিলাম ।
হতাশ

@ ক্রেইগ ইয়ং - আপনি অনুসন্ধানের স্ট্রিং উত্স সম্পর্কে ঠিক বলেছেন। আমি আমার উত্তর সম্পাদনা করেছি, ধন্যবাদ।
dbenham

1
আরও তদন্তে, LFআপনি নথিভুক্ত ইস্যুতে এটি একটি ভিন্নতার মতো দেখাচ্ছে । আমি বুঝতে পারি আমার পরীক্ষার ফাইলটি শেষ হয়নি LFকারণ আমি copyএটি তৈরি করতে অ্যাপেনড মোডে ব্যবহার করেছি। আমি একটি উত্তর ( stackoverflow.com/a/22943056/224704 ) এ সমস্যাটি প্রদর্শনের জন্য একটি কমান্ড লাইন সেশন রেখেছি । মনে রাখবেন যে ইনপুট করা হয় না পুনঃনির্দেশিত, এবং এখনও অনুসন্ধান হ্যাং। সঠিক একই অনুসন্ধান কমান্ডটি এমন কোনও ছোট ফাইলের সাথে ঝুলতে পারে না যা একইভাবে শেষ হয় না LF
বিভ্রান্তি

1
নিউ গবেষনার (Win7): findstr /R /C:"^[0-9][0-9]* [0-3][0-9][0-9]-[0-9][0-9]:[0-5][0-9]:[0-5][0-9]\.[0-9][0-9]* [0-9]*\.[0-9]*"(15 অক্ষর ক্লাস) - ErrorLevel = -1073740791 (0xC0000409), ত্রুটি ডায়ালগ উইন্ডো : Find String (QGREP) Utility has stopped working; এক শ্রেণি বা দুটি মেটা অক্ষর ( *\.) মুছে ফেলার পরে , এটি কাজ করে ...
aschipfl

7

findstr কখনও কখনও বড় ফাইলগুলি অনুসন্ধান করার সময় অপ্রত্যাশিতভাবে ঝুলে যায়।

আমি সঠিক শর্ত বা সীমানা মাপ নিশ্চিত করতে পারি নি। আমি সন্দেহ করি 2GB বৃহত্তর যে কোনও ফাইলই ঝুঁকির মধ্যে থাকতে পারে।

আমি এটির সাথে মিশ্র অভিজ্ঞতা অর্জন করেছি, সুতরাং এটি কেবল ফাইল আকারের চেয়ে বেশি। দেখে মনে হচ্ছে এটি এক্সপি এবং উইন্ডোজ on এ এফআইএনডিআরএস হ্যাঙে পরিবর্তিত হতে পারে যদি পুনর্নির্দেশিত ইনপুটটি এলএফ দিয়ে শেষ না হয় তবে প্রকৃত যেমন সমস্যাটি প্রদর্শিত হয় যখন ইনপুট পুনঃনির্দেশিত না হয়।

নিম্নলিখিত কমান্ড লাইন সেশন (উইন্ডোজ 7) findstr3 জিবি ফাইল অনুসন্ধান করার সময় কীভাবে স্তব্ধ হতে পারে তা প্রদর্শন করে ।

C:\Data\Temp\2014-04>echo 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890> T100B.txt

C:\Data\Temp\2014-04>for /L %i in (1,1,10) do @type T100B.txt >> T1KB.txt

C:\Data\Temp\2014-04>for /L %i in (1,1,1000) do @type T1KB.txt >> T1MB.txt

C:\Data\Temp\2014-04>for /L %i in (1,1,1000) do @type T1MB.txt >> T1GB.txt

C:\Data\Temp\2014-04>echo find this line>> T1GB.txt

C:\Data\Temp\2014-04>copy T1GB.txt + T1GB.txt + T1GB.txt T3GB.txt
T1GB.txt
T1GB.txt
T1GB.txt
        1 file(s) copied.

C:\Data\Temp\2014-04>dir
 Volume in drive C has no label.
 Volume Serial Number is D2B2-FFDF

 Directory of C:\Data\Temp\2014-04

2014/04/08  04:28 PM    <DIR>          .
2014/04/08  04:28 PM    <DIR>          ..
2014/04/08  04:22 PM               102 T100B.txt
2014/04/08  04:28 PM     1 020 000 016 T1GB.txt
2014/04/08  04:23 PM             1 020 T1KB.txt
2014/04/08  04:23 PM         1 020 000 T1MB.txt
2014/04/08  04:29 PM     3 060 000 049 T3GB.txt
               5 File(s)  4 081 021 187 bytes
               2 Dir(s)  51 881 050 112 bytes free
C:\Data\Temp\2014-04>rem Findstr on the 1GB file does not hang

C:\Data\Temp\2014-04>findstr "this" T1GB.txt
find this line

C:\Data\Temp\2014-04>rem On the 3GB file, findstr hangs and must be aborted... even though it clearly reaches end of file

C:\Data\Temp\2014-04>findstr "this" T3GB.txt
find this line
find this line
find this line
^C
C:\Data\Temp\2014-04>

দ্রষ্টব্য, আমি একটি হেক্স সম্পাদককে যাচাই করেছি যে সমস্ত লাইন শেষ হয়ে গেছে CRLF। শুধুমাত্র ব্যতিক্রম যে ফাইল দিয়ে শেষ করা হয় 0x1Aকারণে পথ copyকাজ । তবে খেয়াল করুন, এই অসাধারণতা "ছোট" ফাইলগুলিতে কোনও সমস্যা তৈরি করে না

অতিরিক্ত পরীক্ষার মাধ্যমে আমি নিম্নলিখিতটি নিশ্চিত করেছি:

  • ব্যবহার copyসঙ্গে /bবাইনারি ফাইল জন্য বিকল্প যোগে বাধা দেয় 0x1Aঅক্ষর, এবং findstr3GB ফাইলে স্তব্ধ করে না।
  • 3 জিবি ফাইলটিকে একটি ভিন্ন চরিত্রের সাথে সমাপ্তিও findstrহ্যাং হওয়ার কারণ ঘটায় ।
  • 0x1Aঅক্ষর একটি "ছোট" ফাইল কোন সমস্যার সৃষ্টি করে না। (একইভাবে অন্যান্য সমাপ্তি অক্ষরের জন্য))
  • যোগ করার CRLFপরে 0x1Aসমস্যাটি সমাধান হয়। ( LFনিজেই সম্ভবত যথেষ্ট হবে।)
  • ঝুলন্ত ছাড়াই typeফাইলগুলিতে findstrকাজ করতে পাইপ ব্যবহার করে । (এটি উভয়র পার্শ্ব প্রতিক্রিয়ার কারণে typeবা |লাইনটির অতিরিক্ত প্রান্ত প্রবেশ করানো হতে পারে ))
  • পুনঃনির্দেশিত ইনপুট ব্যবহার হ্যাং হওয়ার <কারণও findstrতবে এটি প্রত্যাশিত; ডেনহ্যামের পোস্টে যেমন ব্যাখ্যা করা হয়েছে : "পুনঃনির্দেশিত ইনপুট অবশ্যই শেষ হবে LF"

1
+1, আমি আমার উইন 7 মেশিনে সমস্যাটি নিশ্চিত করতে সক্ষম হয়েছি। শেষ অক্ষরটি না থাকলে আকারে হুবহু 2GiB ফাইলটি স্থির হয়ে যায় <LF>। দুটি বাইট ছোট একটি ফাইল হ্যাং হয়নি। খুব বাজে!
dbenham

6

যখন বেশ কয়েকটি কমান্ড বন্ধনীতে আবদ্ধ থাকে এবং সেখানে পুরো ব্লকে পুনঃনির্দেশিত ফাইল থাকে:

< input.txt (
   command1
   command2
   . . .
) > output.txt

... তারপরে যতক্ষণ না ব্লকের কমান্ডগুলি সক্রিয় থাকবে ততক্ষণ ফাইলগুলি খোলা থাকে, সুতরাং আদেশগুলি পুনঃনির্দেশিত ফাইলগুলির ফাইল পয়েন্টারটি সরিয়ে ফেলতে পারে। আরও এবং FIND উভয় আদেশই প্রক্রিয়া করার আগে স্ট্যান্ডিন ফাইল পয়েন্টারটিকে ফাইলের শুরুতে সরিয়ে দেয়, সুতরাং একই ফাইলটি ব্লকের ভিতরে বেশ কয়েকবার প্রক্রিয়াজাত হতে পারে। উদাহরণস্বরূপ, এই কোড:

more < input.txt >  output.txt
more < input.txt >> output.txt

... এটির চেয়ে একই ফলাফল উত্পন্ন করুন:

< input.txt (
   more
   more
) > output.txt

এই কোড:

find    "search string" < input.txt > matchedLines.txt
find /V "search string" < input.txt > unmatchedLines.txt

... এটির চেয়ে একই ফলাফল উত্পন্ন করুন:

< input.txt (
   find    "search string" > matchedLines.txt
   find /V "search string" > unmatchedLines.txt
)

FINDSTR আলাদা; এটি স্ট্যান্ডিন ফাইল পয়েন্টারটিকে তার বর্তমান অবস্থান থেকে সরায় না । উদাহরণস্বরূপ, অনুসন্ধান কোডের পরে এই কোডটি একটি নতুন লাইন প্রবেশ করান:

call :ProcessFile < input.txt
goto :EOF

:ProcessFile
   rem Read the next line from Stdin and copy it
   set /P line=
   echo %line%
   rem Test if it is the search line
   if "%line%" neq "search line" goto ProcessFile
rem Insert the new line at this point
echo New line
rem And copy the rest of lines
findstr "^"
exit /B

আমরা এই বৈশিষ্ট্যটি একটি সহায়ক প্রোগ্রামের সহায়তায় ভাল ব্যবহার করতে পারি যা আমাদের উদাহরণস্বরূপ দেখানো হয়েছে এমন একটি পুনর্নির্দেশিত ফাইলের ফাইল পয়েন্টারটি সরিয়ে নিতে দেয় ।

এই আচরণ প্রথম দ্বারা রিপোর্ট করা হয়েছিল Jebপোস্টটি


সম্পাদনা 2018-08-18 : নতুন FINDSTR বাগ রিপোর্ট করেছে

এই কমান্ডটি বর্ণগুলিতে বর্ণগুলি দেখানোর জন্য ব্যবহৃত হয় এবং এই জাতীয় কমান্ডের আউটপুটটি CON ডিভাইসে পুনঃনির্দেশিত করা হয় F রঙে পাঠ্য দেখানোর জন্য কীভাবে FINDSTR কমান্ড ব্যবহার করবেন সে সম্পর্কে বিশদের জন্য এই বিষয়টি দেখুন

এফআইএনডিআরএসটি কমান্ডের এই ফর্মের আউটপুটটি যখন কনকে পুনঃনির্দেশিত করা হয়, তখন পাঠ্যটি পছন্দসই রঙে আউটপুট দেওয়ার পরে অদ্ভুত কিছু ঘটে: তার পরে সমস্ত পাঠ্য আউটপুটটিকে "অদৃশ্য" অক্ষর হিসাবে আখ্যায়িত করা হয়, যদিও আরও সুনির্দিষ্ট বিবরণটি হ'ল পাঠ্যটি হ'ল কালো পটভূমিতে কালো পাঠ্য হিসাবে আউটপুট। আপনি যদি পুরো স্ক্রিনের অগ্রভাগ এবং পটভূমির রঙগুলি পুনরায় সেট করতে COLOR কমান্ড ব্যবহার করেন তবে মূল পাঠ্যটি উপস্থিত হবে। যাইহোক, পাঠ্যটি "অদৃশ্য" হলে আমরা একটি SET / P কমান্ড কার্যকর করতে পারি, সুতরাং প্রবেশ করা সমস্ত অক্ষর স্ক্রিনে উপস্থিত হবে না। এই আচরণটি পাসওয়ার্ড প্রবেশ করতে ব্যবহৃত হতে পারে।

@echo off
setlocal

set /P "=_" < NUL > "Enter password"
findstr /A:1E /V "^$" "Enter password" NUL > CON
del "Enter password"
set /P "password="
cls
color 07
echo The password read is: "%password%"

2

আমি ফাইলের মধ্যে এন ড্যাশ (-) বা এম ড্যাশ (-) ব্যবহার করার সময় প্রথম উত্তরের সন্ধানের জন্য ডেটা উত্স সম্পর্কিত বিভাগ সম্পর্কিত একটি বাগ রিপোর্ট করতে চাই ।

আরও সুনির্দিষ্টভাবে, আপনি যদি প্রথম বিকল্পটি ব্যবহার করতে চলেছেন - আর্গুমেন্ট হিসাবে নির্দিষ্ট ফাইলের নামগুলি , ফাইলটি খুঁজে পাওয়া যাবে না। পুনর্নির্দেশের মাধ্যমে স্ট্রিন বা 3 - ডেটা স্ট্রিম কোনও পাইপ থেকে বিকল্প 2 - স্ট্যান্ডিন ব্যবহার করার সাথে সাথে ফাইন্ডস্ট্র ফাইলটি সন্ধান করবে।

উদাহরণস্বরূপ, এই সাধারণ ব্যাচের স্ক্রিপ্ট:

echo off
chcp 1250 > nul
set INTEXTFILE1=filename with – dash.txt
set INTEXTFILE2=filename with — dash.txt

rem 3 way of findstr use with en dashed filename
echo.
echo Filename with en dash:
echo.
echo 1. As argument
findstr . "%INTEXTFILE1%"
echo.
echo 2. As stdin via redirection
findstr . < "%INTEXTFILE1%"
echo.
echo 3. As datastream from a pipe
type "%INTEXTFILE1%" | findstr .
echo.
echo.
rem The same set of operations with em dashed filename
echo Filename with em dash:
echo.
echo 1. As argument
findstr . "%INTEXTFILE2%"
echo.
echo 2. As stdin via redirection
findstr . < "%INTEXTFILE2%"
echo.
echo 3. As datastream from a pipe
type "%INTEXTFILE2%" | findstr .
echo.

pause

মুদ্রণ করবে:

এন ড্যাশ সহ ফাইলের নাম:

  1. যুক্তি হিসাবে
    FINDSTR: - dash.txt দিয়ে ফাইলের নাম খুলতে পারে না

  2. পুনঃনির্দেশের মাধ্যমে স্টিডিন হিসাবে
    আমি এন ড্যাশ সহ ফাইল।

  3. পাইপ থেকে ডেটাস্ট্রিম হিসাবে আমি এন ড্যাশযুক্ত
    ফাইল।

এম ড্যাশ সহ ফাইলের নাম:

  1. যুক্তি হিসাবে
    FINDSTR: - dash.txt দিয়ে ফাইলের নাম খুলতে পারে না

  2. পুনঃনির্দেশের মাধ্যমে স্টিডিন হিসাবে
    আমি একটি এম ড্যাশ সহ ফাইল।

  3. পাইপ থেকে ডেটাস্ট্রিম হিসাবে আমি একটি এম ড্যাশযুক্ত
    ফাইল।

আশা করি এটা সাহায্য করবে.

এম


1
হাই ম্যাট্রো, যদিও আপনার মন্তব্যগুলি সঠিক হতে পারে, আমি নিশ্চিত নই যে তারা আসল প্রশ্নটির দিকে নজর দিচ্ছে না।
ওয়াই হা লি

আমি বিশ্বাস করি এটি একটি ইউনিকোড সমস্যা, যা FINDSTR সমর্থন করে না। সিএমডি.এক্সই পুনঃনির্দেশ TYPE কমান্ড হিসাবে ইউনিকোড সহ একটি ফাইলের নামটি যথাযথভাবে খুলতে পারে। তবে লাইনের পাশাপাশি কোথাও, এফআইএনডিআরএসটি এন-ড্যাশ এবং এম-ড্যাশ উভয়কেই একটি সাধারণ ড্যাশে রূপান্তরিত করে এবং অবশ্যই ওএস সেই নামটি খুঁজে পায় না। যদি আপনি এন-ড্যাশ এবং / অথবা এম-ড্যাশটির জন্য ড্যাশ প্রতিস্থাপন করে অন্য কোনও ফাইল তৈরি করেন তবে এনআই ড্যাশ বা এম-ড্যাশযুক্ত নাম সরবরাহ করা থাকলে FINDSTR ড্যাশ ফাইলটি অনুসন্ধান করবে।
dbenham

আমি এই সমস্যাটিকে বাগের চেয়ে সীমাবদ্ধতা হিসাবে শ্রেণিবদ্ধ করব।
dbenham

প্রকৃতপক্ষে, এটি এতটা ইউনিকোড সমস্যা নয় কারণ এটি ASCII প্রসারিত। কমান্ড লাইন প্যারামিটারের জন্য বর্ধিত অক্ষর - বর্ধিত ASCII রূপান্তর শিরোনামের অধীনে আমি ইতিমধ্যে আমার মূল উত্তরে এই সমস্যাটি নথিভুক্ত করেছি । FINDSTR এএন-ড্যাশ এবং এম-ড্যাশ সহ অনেকগুলি বর্ধিত এএসসিআইআই কোডগুলিকে "সম্পর্কিত" সত্য এএসসিআইআইতে রূপান্তর করে।
dbenham

1

কোনও অবৈধ বা বেমানান সুইচ নেই এবং কোনও অনুসন্ধান স্ট্রিং প্রযোজ্য দৈর্ঘ্যের সীমা অতিক্রম করে নিচে এই findstrকমান্ডটি নিম্নলিখিত মানগুলির মধ্যে ErrorLevel(বা প্রস্থান কোড) সেট করে sets

  • 0 যখন সমস্ত নির্দিষ্ট ফাইলগুলিতে একটি লাইনে কমপক্ষে একটি একক ম্যাচ সম্মুখীন হয়;
  • 1 অন্যথায়;

একটি লাইন একটি ম্যাচ ধারণ করে বলে মনে করা হয় যখন:

  • কোনও /Vবিকল্প দেওয়া হয়নি এবং অনুসন্ধান এক্সপ্রেশনটি অন্তত একবার ঘটে;
  • /Vঅপশন উল্লিখিত থাকলে এবং সার্চ অভিব্যক্তি ঘটবে না;

এর অর্থ হ'ল /Vবিকল্পটি প্রত্যাবর্তনকৃত পরিবর্তনগুলিও পরিবর্তন করে ErrorLevel, তবে এটি কেবল এটি পুনরায় ফিরিয়ে দেয় না !

উদাহরণস্বরূপ, আপনি যখন test.txtদুটি লাইনযুক্ত একটি ফাইল পেয়েছেন , যার একটিতে স্ট্রিং রয়েছে তবে অন্যটিতে textদুটি থাকে না findstr "text" "test.txt"এবং findstr /V "text" "test.txt"একটিটি ফেরত ErrorLevelদেয় 0

মূলত আপনি বলতে পারেন: যদি findstrকমপক্ষে একটি লাইন ফেরত দেয় ErrorLevelতবে সেট করা হয় 0অন্যথায় 1

নোট করুন /Mবিকল্পটি ErrorLevelমানকে প্রভাবিত করে না , এটি কেবল আউটপুটকে পরিবর্তন করে।

(জাস্ট সম্পূর্ণতার স্বার্থে: findকমান্ড আচরণ করবে ঠিক সম্মান সঙ্গে একই ভাবে /Vবিকল্প এবং ErrorLevel; /Cবিকল্পকে প্রভাবিত করে না ErrorLevel।)


1

FINDSTR এর একটি রঙের বাগ রয়েছে যা আমি /superuser/1535810/is-there-a-better-way-to-mitigate-this-obscure-color-bug-when-piping-to এ বর্ণনা করেছি এবং সমাধান করেছি -findstr / 1538802? noredirect = 1 # comment2339443_1538802

এই থ্রেডের সংক্ষিপ্তসার হিসাবে, বাগটি হ'ল যদি ইনপুট FINDSTR তে কোডের প্রথম বন্ধনী ব্লকের মধ্যে পাইপ করা হয় তবে ইনলাইন এএনএসআই এস্কেপ কালারকোডগুলি পরে সম্পাদিত আদেশে কাজ করা বন্ধ করে দেয়। ইনলাইন কালারকোডগুলির একটি উদাহরণ: echo %magenta%Alert: Something bad happened%yellow%(যেখানে ম্যাজেন্টা এবং হলুদ বর্ণগুলি আগের এএনএসআই এস্কেপ কালারকোড হিসাবে .bat ফাইলে আগে সংজ্ঞায়িত করা হয়)।

আমার প্রাথমিক সমাধানটি ছিল FINDSTR এর পরে ডু-কিছুই না সাবরুটিন call কোনওভাবে কল বা রিটার্ন রিসেট করার দরকার যা কিছু "পুনরায় সেট" করে।

পরে আমি আরও একটি সমাধান আবিষ্কার করলাম যে সম্ভবত সম্ভবত আরও দক্ষ: নীচের উদাহরণ হিসাবে যেমন echo success | ( FINDSTR /R success ) বন্ধুত্বের মধ্যে FINDSTR বাক্যাংশ রাখুন: কোডের একটি নেস্টেড ব্লকের মধ্যে FINDSTR এর বাক্যাংশ স্থাপন করা FINDSTR এর কালারকোড বাগটি পৃথক করে বলে মনে হয় যাতে এটি নেস্টেডের বাইরে কী প্রভাবিত করবে না won't ব্লক। সম্ভবত এই কৌশলটি অন্য কিছু অযাচিত FINDSTR এর পার্শ্ব প্রতিক্রিয়াগুলিও সমাধান করবে


দুর্দান্ত খুঁজে। তবে আপনার বিধিগুলি সরল করা যেতে পারে (কমপক্ষে আমার এন্টারপ্রাইজ উইন্ডোজ 10 মেশিনে)। FINDSTR একই কমান্ড ব্লকের মধ্যে পরবর্তী কমান্ডগুলির জন্য কাজ করে সমস্ত কনসোল অব্যাহতি ক্রমকে বাধা দেয়। FINDSTR কোনও পাইপ, পুনঃনির্দেশিত ইনপুট বা কোনও ফাইল পড়ে কিনা তা বিবেচ্য নয়। পালানোর ক্রম ব্যর্থতা রঙ কোডগুলিতে সীমাবদ্ধ নয়। একটি কমান্ড ব্লক হল বন্ধনীগুলির মধ্যে কমান্ডগুলির যে কোনও সেট, এবং / অথবা &, &&, বা ||
dbenham

@ ডিবেনহাম: সমস্যার দুর্দান্ত সাধারণীকরণ। আপনি কি জানেন যে আমার সমাধান - প্রথম বন্ধনীতে FINDSTR বাক্যাংশ বাসা বাঁধছে - সাধারণ ক্ষেত্রেও কাজ করে? এবং আপনি কি জানেন যে আমার সমাধানের কোনও অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া রয়েছে?
ডলোরেস স্টিভেন্স

আমি কোনও বিস্তৃত পরীক্ষা করিনি, তবে হ্যাঁ, নেস্টেড প্রথম বন্ধনীগুলি একটি সাধারণ সমাধান বলে মনে হচ্ছে এবং আমি কোনও সম্ভাব্য অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া সম্পর্কে ভাবতে পারি না।
dbenham

-1

একাধিক ডিরেক্টরিগুলির জন্য / ডি টিপ: অনুসন্ধান ডিরেক্টরিটির আগে আপনার ডিরেক্টরি তালিকাটি রাখুন। এই সমস্ত কাজ:

findstr /D:dir1;dir2 "searchString" *.*
findstr /D:"dir1;dir2" "searchString" *.*
findstr /D:"\path\dir1\;\path\dir2\" "searchString" *.*

প্রত্যাশিত হিসাবে, আপনি যদি ডিরেক্টরিগুলি দিয়ে শুরু না করেন তবে পাথটি অবস্থানের সাথে সম্পর্কিত \"ডিরেক্টরি নামগুলির মধ্যে কোনও স্থান ফাঁকা না থাকলে পথটি ঘিরে optionচ্ছিক । শেষটি \isচ্ছিক। অবস্থানের আউটপুটটিতে আপনি যেভাবেই পথ দিন তা অন্তর্ভুক্ত থাকবে। এটি ডিরেক্টরি তালিকার সাথে বা তার আশেপাশে কাজ করবে "


আমি এখানে অনাবৃত কিছু দেখছি না। / ডি বিকল্পটি সাহায্যে অন্তর্নির্মিত বর্ণিত হয়েছে। এটি কীভাবে FINDSTR ব্যবহার করবেন সে সম্পর্কে সাধারণ টিপসের জন্য প্রশ্ন নয়। অনিয়ন্ত্রিত বৈশিষ্ট্য, সীমাবদ্ধতা এবং / অথবা বাগগুলি কঠোরভাবে তালিকাভুক্ত করার উদ্দেশ্যে এটি করা হয়েছে।
dbenham

1
@ ডিবেনহ্যাম সত্য যে এটি সত্যিকার অর্থে কোনও দলিলবিহীন নয়, তবে আমি খুঁজে পেয়েছি যে আমি ফলাফল পেয়েছি তা পেতে সন্ধানকারীর সাথে ডিকার করতে হয়েছিল এবং আমি যা পেয়েছি তা ভাগ করে নিচ্ছি যাতে লোকেরা কাজ না করে এমন কমান্ডগুলির সাথে পরীক্ষায় সময় নষ্ট না করে। এইচটি (আমি দুঃখিত যে আপনি আমার ইনপুটটি অপছন্দ করেন - এটি কেবল গঠনমূলক হওয়ার উদ্দেশ্যে করা হয়েছিল)
গর্ডন

আইএমএইচও / ডি সুইচটি পরিষ্কারভাবে বিল্ট সাহায্যে বর্ণনা করা হয়েছে: /D:dirlist Search a semicolon-delimited list of directoriesএবং এটি অনুসন্ধানের স্ট্রিংয়ের আগে স্থাপন করা হয়েছে, তাই আমি বুঝতে পারছি না / ডি সুইচ সম্পর্কে "আপনি কী খুঁজে পেয়েছেন" এবং "কমান্ডগুলি কী" কাজ করবেন না ") ...
আছিনী

@ অ্যাসিনি বহু ভাষায়, গুণাবলীর ক্রমটি বিবেচনা করে না। আমি findstrপ্রথমে তালিকা / ডি এর জন্য ডকুমেন্টেশন বুঝতে পারি । হ্যাঁ বৈশিষ্ট্যটি নথিভুক্ত হওয়ার সাথে আমার কোনও যুক্তি নেই, এটি কেবল গোটচা সম্পর্কে নথিবদ্ধ নয় যে বৈশিষ্ট্যের ক্রমটি গুরুত্বপূর্ণ। আমি খুব কম কমান্ডলাইন কাজ করি, সুতরাং যখন আমি কোনও কমান্ডকে কোবিল করছিলাম, অর্ডারটি কোনও পার্থক্য করেছিল তা অবগত ছিল না, আমি কেবল তাদের সাথে যেমন বৈশিষ্ট্যগুলি যুক্ত করেছি (এবং বর্ণানুক্রমিকভাবে সি এর পূর্ববর্তী ডি)। আমি সত্যিই হতাশ হয়ে যাচ্ছিলাম এবং কমান্ডলাইন নিয়ে বেশি কাজ করে না এমন অন্য কারও জন্য আমার "খুঁজে পাওয়া" অভিজ্ঞতাটি ভাগ করে নিয়েছি।
গর্ডন

1
Al চ্ছিক বৈশিষ্ট্যের ক্রম সাধারণত গুরুত্বপূর্ণ হয় না। findstrডকুমেন্টেশন নির্দিষ্ট করে stringsঅংশ নয় ঐচ্ছিক এবং আপনি পরে এটি স্থান হবে যে ঐচ্ছিক গুণাবলী এবং সামনে ঐচ্ছিক ফাইলের নাম তালিকা। যদি "আপনার পাওয়া যায়" যদি এটির ব্যবহার বিন্যাসটি অনুসরণ না করে কোনও কমান্ড ব্যবহার করা একটি ত্রুটির কারণ হয়ে থাকে, তবে এই জাতীয় বিন্দুটি নথিবদ্ধ। কমান্ড সিনট্যাক্সটি দেখুন : "সিন্ট্যাক্সটি আপনাকে যে আদেশে টাইপ করতে হবে এবং যে কোনও পরামিতি এটি অনুসরণ করবে অবশ্যই প্রদর্শিত হবে"
আছিনী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.