গ্রেপ সহ একটি রেখার শেষে প্যাটার্ন সনাক্তকরণ


64

যদি আমি করি:

$ ls -R
.:
4Shared/  Cloud/

./4Shared:
UFAIZLV2R7.part3.rar

./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part

যদি আমি .rarকেবল ফাইলগুলি তালিকাবদ্ধ করতে চাই এবং আমি গ্রেপ ব্যবহার করি তবে এটি আমাকে .rar.partফাইলগুলিও প্রদর্শন করবে , আমার ইচ্ছা কী নয়।
আমি ব্যবহার করে এই সমাধানে করছি findবা ls **/*.rarবলেছিলেন যেমন এই থ্রেড এবং তারা জরিমানা কাজ করে, কিন্তু যদি এটা মাধ্যমে এটি কি সম্ভব আমি শিখতে চাই grep

আমি চেষ্টা করেছি (ভেবে EOL)

ls -R | grep ".rar\n"

কোন ফলাফল ছাড়া।
আমি মনে করি যে লাইনটির শেষে গ্রেপিং পাওয়া গেলে সমস্যাটি আবিষ্কারের মধ্যে রয়েছে তবে আমি নিশ্চিত নই।

এখানে কোন সাহায্য, দয়া করে?


আপনি কেন grepএই ক্ষেত্রে ব্যবহার করতে চান ? কেন হবে না find?
ডিভনুল

1
@ ডিভনুল, কেবল একটি লাইনের শেষে থাকা নিদর্শনগুলি কীভাবে সনাক্ত করবেন তা জেনে রাখা অনেক ক্ষেত্রে কার্যকর হতে পারে। উদাহরণস্বরূপ: বহনযোগ্যতা, এমবেডড অতি-সরল লিনাক্স সহ রাউটারগুলিতে ব্যবহার, উইন্ডোজের জন্য আনক্স ইউটিলসের সাথে ব্যবহার (এর findকমান্ডটি উইন্ডোজের সাথে বিরোধযুক্ত ) এবং ... শিখতে ;-)। প্রশ্নটি "একটি দিরের মধ্যে তালিকাভুক্ত ফাইলগুলি" সম্পর্কে নয় (এটি কেবল একটি কাস্টম উদাহরণ) বরং "
গ্রেপ

1
সত্যি বলতে, আপনি যদি নিজের বিভাজক হওয়ার জন্য কোনও লাইনের শেষে গণনা করেন তবে আপনার ব্যবহার করা উচিত ls -1R
মাইকসার্ভ

1
এবং আপনার এমনকি প্রয়োজন নেই grep। আমার উত্তর দেখুন।
মাইক্রজারভ

@ মিমকিজার, -1Rসুইচ ছাড়া কী হতে পারে । স্পষ্টতই ফলাফলগুলি একই।
সোপালাজো ডি অ্যারিরিজ

উত্তর:


88

$নোঙ্গর একটি লাইনের শেষে সাথে মেলে।

ls -R | grep '\.rar$'

আপনি এটির জন্যও ব্যবহার করতে পারেন find:

find . -name '*.rar'

আমি বুঝতে পারি নি "।" গ্রেপ এড়ানো প্রয়োজন। এটি কি ওয়াইল্ড কার্ড হিসাবে বিবেচনা করা হয়?
thebunnyrules

1
@thebunnyrules "।" ইন রেজেক্স মানে যে কোনও একটি চরিত্র।
জর্দানম

10

আপনার প্রশ্নটি ছাড়াও দয়া করে নোট করুন যা .rarকেবল ".র" সাথে মেলে না তবে এটির .আগে প্রতিটি একক অক্ষর (সহ ) এর সাথে মেলে rar.এক্ষেত্রে সম্ভবত কোনও সমস্যা নয় তবে অবশ্যই রেজেক্সে পালাতে হবে।

ls -R | grep "\.rar$"

আপনি কি বোঝাতে চেয়েছিলেন যে প্যাটার্ন .ascমত *asc? সুতরাং এটি মিলবে, উদাহরণস্বরূপ whereverasc,।
সোপালাজো ডি অ্যারিরিজ

2
@ সোপালাজোড অরিরিজ না, এটি প্রতিটি গ্রুপের চরিত্রের সাথে মেলে না তবে প্রতিটি একক চরিত্রের সাথে মিল রয়েছে xrar
হউক লেগেছে

5

আপনি grepএকটি শব্দ সীমানা থেকে শুরু করে আপনার স্ট্রিং সন্ধানের নির্দেশ দিতে পারেন। এ .জাতীয় এই সীমার মধ্যে একটি।

$ ls -R | grep '\brar$'

উদাহরণ

বলুন আমার কাছে এই নমুনা তথ্য রয়েছে।

$ ls -1
afile.rar
xrar
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part2.rar.part

এই কমান্ডটি কেবল .rarএক্সটেনশন সহ ফাইলটি খুঁজে পেতে পারে ।

$ ls -R | grep '\brar$'
afile.rar

এটি কিভাবে কাজ করে?

মেটাচার্যাক্টর \bহল ক্যারেট এবং ডলারের চিহ্নের মতো অ্যাঙ্কর। এটি এমন একটি অবস্থানে মেলে যা "শব্দ সীমানা" বলা হয় called এই ম্যাচটি শূন্য দৈর্ঘ্যের।

পরিস্থিতি যেখানে এটি কাজ করবে না

আপনার যদি নামযুক্ত ফাইল থাকে তবে এটিও blah-rarসনাক্ত হয়ে যাবে।

$ ls -R | grep '\brar$'
afile-rar
afile.rar

এটি কারণ একটি বর্ণমালা বাদে অন্যান্য অক্ষর সাধারণত সীমানা অক্ষর হিসাবে বিবেচিত হয়, এবং তাই এই পদ্ধতির অতীত পিছলে যেতে পারে।


প্রথম দর্শনে একইরকম মনে হয় তবে এটি কিছুটা আলাদা indeed ধন্যবাদ, @ এসএমএল। আমি যদি "সহজ কোটের পরিবর্তে ডাবল উদ্ধৃতি ব্যবহার করি তবে তা কি বিরক্ত হয় ?
সোপালাজো ডি অ্যারিরেজ

1
@ সোপালাজোডে আরিরিজেজ - কোনওভাবেই কাজ করা যায় না। এটি ডাব্লু / থেকে নামকরণ করা যেতে পারে এমন কোনও ফাইল সন্ধান করবে .rar। তবে এটি ব্যবহারে কোনও সমস্যা হবে না ls -R। শুধুমাত্র যদি আপনি ব্যবহার করতে ঘটে ls -Ra
SLM

আপনারা কেউ কি এই সামান্য পার্থক্যটি জনগণের কাছে ব্যাখ্যা করতে আগ্রহী?
হউক লেগেছে

@ হককিজিং আমার উদাহরণে -Pস্যুইচ করুন grep। এটি যুক্তিটির পিসিআরই ব্যাখ্যাকে ট্রিগার করে।
SLM

1
@ সোপালাজোডেআরিরিজেজ - যদি কোনও ফাইলে একটি নিউলাইন চরিত্র থাকে ( \n) যা আইনী চরিত্র। ls -1Rফাইল নির্বিশেষে একটি একক কলাম প্রদর্শন করা করতে জোর করবে।
slm

0

শুধু কর :

ls -1R -I"?" -I"??" -I"???" -I"*[!.][!r][!a][!r]"

আপনার মোটেই দরকার নেই grep

দ্রষ্টব্য: উপরের কাজগুলি ... যদিও এটি এখনও কমপক্ষে পায়afile-rarএবং আমি বুঝতে পারি না কেন। আমি এটি এখানে রেখে দেব, তবে এতে আমি গর্ববোধ করি না। অন্য যে কোনও ক্ষেত্রে যেমন বলেছেন:

find . '*.rar'

এই নাম দেওয়া ফাইল ব্লক করা হয়নি xrarবা afile-rar
SLM

আমি এখনও অন্য ফাইলগুলি আউটপুটটিতে পাচ্ছি।
SLM

@ এসএলএম অন্যান্য ফাইল কি? আমি মনে করি এটি খুব সংক্ষিপ্ত হওয়ার কারণ হতে পারে। আমি শুধু খেয়াল করেছি। আমি এটা ঠিক করেছিলাম।
মাইকজার্ভ

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

@ এসএমএল হ্যাঁ, এ কারণেই আমি এখানে এসেছি। কেন বুঝতে পারছি না -dashxrarআমি যে জিনিসটি পরিচালনা করতে -dash.পারি তা কিন্তু আমি বুঝতে পারি না-dash.
মাইকসার্ভ

0

$ লাইনটি শেষের হিসাবে কাজ করতে একক উদ্ধৃতি ব্যবহার করুন। আপনি যদি কিছু পরিবর্তনশীলও গ্রেপ করতে চান তবে নীচে হিসাবে ডাবল এবং একক উদ্ধৃতিগুলির সংমিশ্রণটি ব্যবহার করুন:

grep "$var"'$'

আমার আগের পোস্টটি এটি নকল বলে মুছে ফেলা হয়েছে। এটি কীভাবে আলাদা তা আমাকে ব্যাখ্যা করুন।

অন্যান্য পোস্টে ডাবল উদ্ধৃতিগুলির ""সম্পূর্ণ ব্যবহার, বা একক উদ্ধৃতিগুলির সম্পূর্ণ ব্যবহারের উল্লেখ রয়েছে ''। তাদের উভয়েরই নিজস্ব সীমাবদ্ধতা রয়েছে। নিম্নলিখিত এটি ব্যাখ্যা করে।

সমস্ত ডাবল উদ্ধৃতি সহ সমস্যা নিম্নলিখিত: grep "pattern$"নিম্নলিখিত ত্রুটি দেয়:Illegal variable name.

এবং সমস্ত একক উদ্ধৃতি ব্যবহার করে কাজ করে তবে আপনি যদি পরিবর্তনীয় বিকল্প চান তবে সমস্ত একক উদ্ধৃতি কাজ করবে না । উদাহরণ স্বরূপ:

যদি আমার কাছে A_BOOKস্ট্রিং থাকে তবে একটি ফাইলের অন্যান্য স্ট্রিং সহ।

$ cat FILE
A_BOOK
B_BOOK_NOT_LAST
C_BOOK

আমি যদি বইটি একটি পরিবর্তনশীল বিকেতে সেট করি

set BK = BOOK

যদি আমি সমস্ত ডাবল উদ্ধৃতি দিয়ে গ্রেপ করি তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: grep "${BK}$" FILE*ভেরিয়েবল প্রতিস্থাপনের জন্য 1 ম,, প্যাটার্নের শেষের জন্য দ্বিতীয় ( অবৈধ ভেরিয়েবলের নাম )।

আমি যদি সমস্ত একক উদ্ধৃতি দিয়ে গ্রেপ করি তবে পরিবর্তনশীল প্রতিস্থাপনটি ঘটে না। grep '${BK}$' FILEকিছুই না

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

$ grep "${BK}"'$'  # << gives expected output
A_BOOK
C_BOOK

দেখে মনে হচ্ছে আপনি csh ব্যবহার করছেন। "foo$"সিনট্যাক্স SH ও পরিবার উপর কাজ করে জরিমানা।
ওলরিন

হ্যাঁ ওরেলিন। আমি tcsh ব্যবহার করছি। এটি নির্দেশ করার জন্য ধন্যবাদ।
user274900

0

যদি উপরেরগুলি অনুসরণ করে এবং কিছুই কাজ না করে তবে এটি লাইন-এন্ডিংয়ের কারণে হতে পারে। ঠিক করতে, করুন: dos2unix pr0n.txtএবং আপনার grepআবার করুন।

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