একক অক্ষরের শব্দের সাথে গ্রেপ অদ্ভুত আচরণ


10

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

আমি নিম্নলিখিত আছে

$ cat file
file
types
extensions

$ cat stopwords
i
file
types

grep -vwFf stopwords file

আমি ফলাফলটি আশা করছি: extensions

তবে আমি পেয়েছি (আমার মনে হয় ভুল)

file
extensions

মনে হচ্ছে fileস্টপওয়ার্ড ফাইলটিতে শব্দটি বাদ পড়েছে। এখন এখানে শীতল বিট আছে: যদি আমি stopwords ফাইল পরিবর্তন, একক শব্দ / অক্ষর পরিবর্তন করে i, প্রথম লাইনে বাদে অন্য কোন ascii বর্ণ থেকে f, i, l, e, তারপর একই grep কমান্ড প্রয়োগ আমাকে একটি ভিন্ন এবং সঠিক ফলাফল দেয় extensions

এখানে কী চলছে এবং আমি কীভাবে এটি ঠিক করব?

আমি একটি ম্যাক ওএসএক্স জিএনইউ ব্যাশ, সংস্করণ ৪.৪.১২ (1) এ গ্রেপ (বিএসডি গ্রেপ) 2.5.1-ফ্রিবিএসডি ব্যবহার করছি


আপনি শব্দের -xপরিবর্তে লাইন রেজেক্সের জন্য স্যুইচটি ব্যবহার করতে চাইতে পারেন -w? তবে আমি মনে করি যে -Fস্যুইচ তাদের উভয়টি বাতিল করে দেবে, বা তদ্বিপরীত।
jesse_b

গ্রেপ (জিএনইউ গ্রেপ) ৩.১ আপনার প্রত্যাশা অনুযায়ী কাজ করে।
হউক লেগেছে

আমি এটি প্রতিলিপি করেছি। অন্য একটি ড্যাটুম: ফাইলের iপ্রথম প্যাটার্নের চেয়ে দ্বিতীয়টি প্যাটার্ন তৈরি stopwordsকরাও আচরণকে পরিবর্তন করে।
JdeBP

আমি ওপেনবিএসডি 6.2 তে স্থানীয় grepবা জিএনইউ grep3.1 এর সাথে আচরণটি পুনরুত্পাদন করতে পারি না ।
কুসালানন্দ

উত্তর:


13

এটি একটি বাগ ছিল bsdgrepযা একটি চলক সম্পর্কিত যা বর্তমান লাইনের অংশটি এখনও স্ক্যান করতে ট্র্যাক করে যা একাধিক নিদর্শন জড়িত থাকার সময় নিয়মিত এক্সপ্রেশন ম্যাচিং ইঞ্জিনে ধারাবাহিক কলগুলির সাথে ওভাররাইট হয়।

স্থানীয় ফিক্স

আপনি -wঅপশনটি না ব্যবহার করে এটি প্রায় এক পর্যায়ে কাজ করতে পারেন , যা সঠিক ক্রিয়াকলাপের জন্য এই পরিবর্তনশীলটির উপর নির্ভর করে এবং এইভাবে ব্যর্থ হচ্ছে, তবে পরিবর্তে শব্দের শুরু এবং শেষের সাথে মিলে যাওয়া নিয়মিত এক্সপ্রেশন এক্সটেনশনগুলি ব্যবহার করে আপনার stopwordsফাইলটিকে এমন দেখাচ্ছে:

\ <আমি \>
\ <ফাইল \>
\ <ধরনের \>

এই কর্মপরিকল্পনাটিরও প্রয়োজন হবে যে আপনি -Fবিকল্পটি ব্যবহার করবেন না ।

লক্ষ্য করুন নথিভুক্ত রেগুলার এক্সপ্রেশন উপাদান [[:<:]]এবং [[:>:]]যে re_formatম্যানুয়াল বলে আপনার সম্পর্কে করবে না এখানে কাজ করি। এটি কারণ নিয়মিত এক্সপ্রেশন লাইব্রেরি সংকলিত হয় bsdgrepGNU নিয়মিত অভিব্যক্তি সামঞ্জস্যতা সমর্থন চালু আছে। এটি অন্য একটি বাগ, যা সংশোধন করা হয়েছে বলে জানা গেছে।

পরিষেবা ফিক্স

এই বাগটি এই বছরের শুরুর দিকে ঠিক করা হয়েছিল। এই ফিক্সটি এখনও এটিকে ফ্রিবিএসডি-র স্ট্যাবল বা রিলিজ ফ্লেভারগুলিতে তৈরি করতে পারেনি, তবে এটি বর্তমানের মধ্যে রয়েছে বলে জানা গেছে।

এটি ম্যাকওএস সংস্করণে grepফ্রিবিএসডি থেকে উদ্ভূত হওয়ার জন্য bsdgrepদয়া করে অ্যাপলের সাথে পরামর্শ করুন। ☺

আরও পড়া


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

1

এই কোড:

pl " Input data file data1 and stopwords file data2:"
head data1 data2

pl " Expected output:"
cat $E

pl " Results, grep:"
# grep -vwFf stopwords file
grep -vwFf data2 data1

pl " Results, cgrep:"
cgrep -x1 -vFf data2 data1

সৃষ্টি করে:

-----
 Input data file data1 and stopwords file data2:
==> data1 <==
file
types
extensions

==> data2 <==
i
file
types

-----
 Expected output:
extensions

-----
 Results, grep:
file
extensions

-----
 Results, cgrep:
extensions

যেমন একটি সিস্টেমে:

OS, ker|rel, machine: Apple/BSD, Darwin 16.7.0, x86_64
Distribution        : macOS 10.12.6 (16G29), Sierra
bash GNU bash 3.2.57

ব্রিগের মাধ্যমে এবং সোর্সফোরেজ থেকে সিগ্রেপ সম্পর্কিত আরও বিশদ:

cgrep   shows context of matching patterns found in files (man)
Path    : ~/executable/cgrep
Version : 8.15
Type    : Mach-O64-bitexecutablex86_64 ...)
Home    : http://sourceforge.net/projects/cgrep/ (doc)

চিয়ার্স, drl


আমি নিজেকে একটি নতুন গ্রেপ পেয়েছি।
টিম

@ টিম - আমি আশা করি আপনি আমার মতো সিগ্রিপকে দরকারী হিসাবে আবিষ্কার করবেন। আমি যে পরীক্ষাগুলি করেছি তার গতি এটিকে মোটামুটি জিএনইউ গ্রেপের সাথে সামঞ্জস্য করে এবং "প্রসঙ্গ / উইন্ডোটিং" বৈশিষ্ট্যগুলি খুব কার্যকর useful এটি লিনাক্স সিস্টেমগুলিতে সহজেই তৈরি করে ... চিয়ার্স, ড্রল
ড্রল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.