সামনের-লাইনের $ অ্যাঙ্কর গ্রেপ কমান্ডের সাথে কাজ করছে না, যদিও সামনের-লাইনের ^ অ্যাঙ্কর রয়েছে?


19

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

আমি যখন প্রবেশ করি

grep "^COW" masternospaces.txt

আমি যা চাই তা পেয়েছি: COW দিয়ে শুরু হওয়া সমস্ত শব্দের একটি তালিকা।

কিন্তু আমি যখন প্রবেশ করি

grep "COW$" masternospaces.txt

আমি COW দিয়ে শেষ হওয়া শব্দের একটি তালিকা পেতে আশা করি (এরকম অনেকগুলি শব্দ রয়েছে), এবং কিছুই এখুনি ফেরানো হয় না।

ফাইলটি একটি সরল পাঠ্য ফাইল, প্রতিটি লাইনে সমস্ত ক্যাপগুলিতে কেবল একটি শব্দ (বা কোনও ফাঁকা স্থান নেই এমন একটি শব্দ বাক্যাংশ) থাকে।

এখানে কি ঘটতে পারে কোন ধারণা?


3
মাস্টারনোস্পেস.টিটিএসটি ফাইলের উত্স কী? এটি কি ইউনিক্স-স্টাইলের এলএফগুলির পরিবর্তে উইন্ডোজ-স্টাইলের লাইন টার্মিনেশনগুলি (সিআর-এলএফ) পাওয়া সম্ভব?
স্টিল্ড্রাইভার

2
নিশ্চিত নয়, তবে আপনি কি তালিকার শব্দ বা লাইনের তালিকা খুঁজছেন ... ?
মাইকজার্ভ

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

মাইকসার্ভ-- এই। টেক্সট ফাইলে প্রতিটি লাইনটি কেবল একটি শব্দ (বা শব্দের মধ্যে ফাঁকা স্থান নেই এমন একটি শব্দগুচ্ছ, সুতরাং আবার একটি "শব্দ")। সুতরাং আমি লাইনগুলি অনুসন্ধান করছি, আমি মনে করি। । । প্রতিটি লাইনে আমি ক্রসওয়ার্ডের উদ্দেশ্যে একটি শব্দ বিবেচনা করছি তার একটি মাত্র আছে has
ডিটালভ্যাচিও

1
hexdumpআপনার লাইনের সমাপ্তি কীভাবে বিন্যাস করা হয় তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন । আমি আপনাকে আমার প্রিয় বিন্যাস ব্যবহার করুন: hexdump -e '"%08_ad (0x%08_ax) "8/1 "%02x "" "8/1 "%02x "' -e '" "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt। আউটপুট সহ, লাইন শেষটি পরীক্ষা করুন: 0a-> LF, 0d-> CR
ব্যবহারকারী 43791

উত্তর:


23

@ স্টিল্ড্রাইভার যেমন উল্লেখ করেছেন, সমস্যাটি grepপ্রত্যাশার চেয়ে ভিন্ন লাইনের শেষ শৈলীর কারণে হতে পারে ।

লাইন শেষ চেক করতে

hexdumpআপনার লাইনের সমাপ্তি কীভাবে বিন্যাস করা হয় তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন । আমি আপনাকে আমার প্রিয় ফর্ম্যাটটি ব্যবহার করার পরামর্শ দিচ্ছি:

hexdump -e '"%08_ad (0x%08_ax)    "8/1 "%02x ""   "8/1 "%02x "' -e '"    "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt

আউটপুট সহ, লাইন শেষটি পরীক্ষা করুন: 0a-> LF, 0d-> CR। খুব দ্রুত উদাহরণ এ জাতীয় কিছু দেবে:

$ hexdump -e '"%08_ad (0x%08_ax)    "8/1 "%02x ""   "8/1 "%02x "' -e '"    "8/1 "%_p""|"8/1 "%_p""\n"' masternospaces.txt
00000000 (0x00000000)    4e 6f 20 43 4f 57 20 65   6e 64 69 6e 67 0d 0a 45    No COW e|nding..E
00000016 (0x00000010)    6e 64 69 6e 67 20 69 6e   20 43 4f 57 0d 0a          nding in| COW..

উল্লেখ্য ডস বিন্যাসে লাইন শেষা w শ: 0d 0a

লাইন শেষ পরিবর্তন করতে

তুমি দেখতে পার বিভিন্ন সরঞ্জাম ব্যবহার করে লাইন এন্ডিং পরিবর্তনের বিভিন্ন পদ্ধতির জন্য এখানে বা এখানে , তবে এক সময়কার জিনিসটির জন্য আপনি সর্বদা vi / vim ব্যবহার করতে পারেন:

vim masternospaces.txt
:set fileformat=unix
:wq

কিছু পরিবর্তন না করে গ্রেপ করতে

আপনি যদি শুধু চান grep লাইন শেষ হওয়া কোনও বিষয়ই মেলাতে সর্বদা লাইন এন্ডিং নির্দিষ্ট করতে পারেন:

grep 'COW[[:cntrl:]]*$' masternospaces.txt

যদি একটি ফাঁকা লাইন দেখানো হয় তবে আপনি যা ব্যবহার করে সত্যই কিছু মিলছেন তা পরীক্ষা করতে পারেন -v বিকল্পটিরcat :

grep 'COW[[:cntrl:]]*$' masternospaces.txt | cat -v

আমার ব্যক্তিগত প্রিয়

আপনি গ্রেপ এবং উভয় আউটপুট ব্যবহার করে মানক করতে পারে sed :

sed -n '/COW^M*$/{;s/^M//g;p;};' masternospaces.txt

কোথায় ^MCtrl-V Ctrl-Mআপনার কীবোর্ডে টাইপ করে পাওয়া যায় ।

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


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

এটা খুব খারাপ এই পোস্টটির বন্ধ নেই, আমার পক্ষে কমপক্ষে। লাইফের শেষের সাথে কীভাবে মিলে যায় তা আমার জীবনের জন্য আমি বুঝতে পারি না। আমি যদি হেক্স ডাম্প করি তবে উপরের উদাহরণের মতো শেষ করার মতো সুন্দর একটি লাইন আমি খুঁজে পাচ্ছি না। আমি হেক্সের সাথে কাজ করার সাথে পরিচিত নই তাই আমি এটি সঠিকভাবে না পড়তে পারি। আমি [[:cntrl:]]@ ব্যবহারকারী 43791 এর প্রস্তাবিত চেষ্টাও করেছি এবং এটি এখনও আমার সাথে কোনও কিছুর সাথে মেলে না। এর কোন মানে নেই. আমি জিএনইউ গ্রেপ ২.২০ ব্যবহার করছি এবং এনডিপিআই থেকে আউটপুট পার্সিং করছি যা একটি পাঠ্য ফাইলে লেখা ছিল
harperville

@harperville আপনি যদি cat -v yourfile.extকি দেখেন?
ব্যবহারকারী 43791

ওয়েল, উত্তেজনাপূর্ণ বা অপ্রত্যাশিত কিছুই। আমি এগুলি দেখার মতো আশা করি কেবল সামগ্রীগুলি। নির্দিষ্ট কিছু আপনি খুঁজছেন? আমি আউটপুট এখানে পেস্ট করতে পারি না তবে আমি কেবল সামগ্রীগুলি দেখতে পাচ্ছি। নিয়মিত ওল "" ASCII ইংরাজী পাঠ্য "অনুসারে file
হার্পারভিল

@harperville প্রতিটি লাইনের শেষে কোনও অতিরিক্ত "^ এম" নেই? আপনি কি হেক্সের প্রথম কয়েকটি লাইন পেস্ট করতে পারবেন?
ব্যবহারকারী 43791

1

যদিও আপনি 'স্ট্যান্ডার্ড' রেজিএক্স সিনট্যাক্সটি গ্রেপের সাথে ব্যবহার করতে পারেন ( @ ব্যবহারকারী 43791 এর উত্তর হিসাবে ) তবে ইনপুট সীমানা চিহ্নিত করতে অন্যান্য শনাক্তকারীও রয়েছে।

পুরো লাইনটির শুরু এবং শেষের জন্য ম্যাথারগুলি হ'ল \`(ব্যাকটিক) (পরিবর্তে ^) এবং\' (অ্যাস্ট্রোস্ট্র)$ )।

সুতরাং আপনার মূল কমান্ডের জন্য, আপনি এটি ব্যবহার করবেন: grep "COW\'" masternospaces.txt

পার্শ্ব নোট: এটি নোট করাও গুরুত্বপূর্ণ ?এবং +আপনি যদি এগুলি ব্যবহার করে \?এবং এড়িয়ে না যান তবে আক্ষরিক আচরণ করা হবে\+ তাদের Regex ধাঁচের নির্বাচক প্রতিরূপ করা।

সূত্র: grepনিয়মিত অভিব্যক্তি সিনট্যাক্স



1

\rগ্রেপের আগে মুছে ফেলার আরেকটি উপায় :

... | dos2unix | egrep 'COW$' | ...

আমি এটি পছন্দ করি যেহেতু আমি [[:cntrl:]]দীর্ঘদিনের মতো জিনিস মনে রাখি না ।


-2

"COW $" যখন বাশ গ্রেপের জন্য প্যারামিটার সেট করে, এটি 'COW' হিসাবে ব্যাখ্যা করা হত যেখানে "$" "" হিসাবে বিবেচনা করা হয়, বেকেস $ একটি এস্কেপ সিম্বল ol যখন $ দ্বারা কোনও কিছুর মিল ছিল না, এটি ব্যাশ শেল দ্বারা খালি স্ট্রিং হিসাবে ব্যাখ্যা করা হয়, সুতরাং এর পরিবর্তে আপনার গ্রেপ 'COW $' মাস্টারনোস্পেস.টেক্সট ব্যবহার করা উচিত।


3
যেহেতু এর কোনও বৈধ সম্প্রসারণ নেই $, এটি একা বাশ দ্বারা ছেড়ে দেওয়া হবে এবং গ্রেপ দ্বারা ব্যবহৃত হবে। নিজের জন্য দেখুন: echo "COW$"- $এখনও থাকবে।
জেফ স্ক্যালার হলেন

-3

বিএসডি গ্রেপে আপনাকে "$" থেকে পালাতে হবে এবং আপনার স্ট্রিংটি ডাবল উদ্ধৃতিতে আবদ্ধ করতে হবে:

"COW\$"

1
উম ... না $, শেল বিশেষ হবে না, কারণ এটি পরে কাপড় একটি বৈধ শেল পরিবর্তনশীল নাম নয়। স্ট্যাটিক স্ট্রিংগুলির চারপাশে একক উদ্ধৃতি ব্যবহার করা ভাল ধারণা, তবে এখানে কোনও পার্থক্য হবে না।
কুসালানন্দ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.