আক্ষরিক ট্যাব ব্যবহার না করে কীভাবে ট্যাবগুলির জন্য গ্রেপ করবেন এবং কেন এটি কাজ করে না?


146

আমি যখন (ই) গ্রেপ সহ কোনও ফাইলে ট্যাবগুলি সন্ধান করি তখন আমি লিটারেরাল ট্যাব ( ^v + <tab>) ব্যবহার করি । আমি \tনিয়মিত অভিব্যক্তিগুলিতে ট্যাবগুলির প্রতিস্থাপন হিসাবে ব্যবহার করতে পারি না । উদাহরণস্বরূপ সেড সহ এই অভিব্যক্তিটি খুব ভাল কাজ করে।

সুতরাং কোনও অ-লিটারাল রিপ্লেসমেন্ট ব্যবহারের কি কোনও সম্ভাবনা আছে এবং অ- <tab>কাজ করা / ব্যাখ্যা করা হয়নি এমন ব্যাকগ্রাউন্ডগুলি কী কী \t?


উত্তর:


206

গ্রেস POSIX দ্বারা নির্ধারিত হিসাবে নিয়মিত এক্সপ্রেশন ব্যবহার করে । যে কারণেই হোক পসিক্স \tট্যাব হিসাবে সংজ্ঞায়িত হয়নি ।

আপনার বেশ কয়েকটি বিকল্প রয়েছে:

  • পার্ল দ্বারা নির্ধারিত নিয়মিত এক্সপ্রেশন ব্যবহার করতে গ্রেপকে বলুন (পার্লটির \tট্যাব রয়েছে):

    grep -P "\t" foo.txt

    ম্যান পৃষ্ঠা সতর্ক করে দিয়েছে যে এটি একটি "পরীক্ষামূলক" বৈশিষ্ট্য। অন্তত \tভাল কাজ মনে হচ্ছে। তবে আরও উন্নত পার্ল রেজেক্স বৈশিষ্ট্যগুলি নাও পারে।

  • আপনার জন্য একটি ট্যাব অক্ষর মুদ্রণ করতে প্রিন্টফ ব্যবহার করুন:

    grep "$(printf '\t')" foo.txt
  • আক্ষরিক ট্যাব অক্ষর ব্যবহার করুন:

    grep "^V<tab>" foo.txt

    এটি হ'ল: টাইপ করুন grep ", তারপরে টিপুন ctrl+v, তারপরে টিপুন tab, তারপরে টাইপ করুন " foo.txt। টিপে ctrl+vটার্মিনাল পরবর্তী কী ধারণকৃত গ্রহণ করা হয়। তার মানে টার্মিনালটি ট্যাব কীটিতে আবদ্ধ কিছু ফাংশন ট্রিগার না করে একটি ট্যাব অক্ষর সন্নিবেশ করবে।

  • ব্যবহার ANSI C উদ্ধৃত ব্যাশ এর বৈশিষ্ট্য:

    grep $'\t' foo.txt

    এটি সমস্ত শেলগুলিতে কাজ করে না।

  • অজানা ব্যবহার করুন:

    awk '/\t/'
  • সেড ব্যবহার করুন:

    sed -n '/\t/p'

পসিক্স এবং অন্যান্য সিস্টেমে সংজ্ঞায়িত চরিত্র শ্রেণীর সংক্ষিপ্তসার জন্য নিয়মিত প্রকাশের বিষয়ে উইকিপিডিয়া নিবন্ধটি দেখুন ।


এনজোটিবের উত্তরের ভিত্তিতে আমাকে নিম্নলিখিতগুলি যুক্ত করতে দিন: grep $'\t' foo.txt(তবে আমি সাধারণত এর fgrepপরিবর্তে লিখি grep)
ওয়াল্টার ট্রস

পরিবেশের ভেরিয়েবলের মান ব্যবহারের সাথে আমার এটির দরকার ছিল। আমি ব্যবহৃত grep "$(printf '\t')${myvar}" foo.txt। এটা ভাল কাজ করে। কয়েকটি চেষ্টা করে, আমি শেষ ফর্মটি কাজ করতে পারিনি।
sancho.s

1
কোনও কারণ আছে যে সরলভাবে grepনীরবে \tট্যাব হিসাবে ব্যাখ্যা করতে পারেন ? পসিক্সের কি এর \tঅর্থ অন্য কিছু দরকার? সম্ভবত এটি শুধুমাত্র একটি আক্ষরিক মেলে অনুমিত এর \ একটি দ্বারা অনুসরণ t?
অ্যারন ম্যাকডেইড

সম্ভবত লক্ষণীয় যে বিএসডি (ওএসএক্স সহ) গ্রেপ-তে, -পি বিকল্পের অভাব রয়েছে।
টেক্সটগীক

ম্যান পৃষ্ঠা থেকে This is highly experimental and grep -P may warn of unimplemented features.সম্ভবত -Pউত্তরাধিকার ব্যবস্থাতে ব্যবহার করা ভাল ধারণা নয় । printfপছন্দ উত্তম
Avindra Goolcharan

13

আপনি যে উত্তরটি শুনতে চান তা ঠিক এটি নয়, তবে পালানোর ক্রমের একটি সম্ভাব্য ব্যবহার বাশ দ্বারা সরবরাহ করা হয়েছে

command | grep $'\t'

(এটি ডাবল উদ্ধৃতিতে রাখবেন না!)।


1
-E এর দরকার নেই (যা অনুসন্ধান করা হয়েছে তা কোনও রেজেক্স নয়)। কমান্ড থেকে পাইপ দেওয়ারও দরকার নেই। এটি বলেছিল,
বাশের

2
প্রকৃতপক্ষে, আমি প্রস্তাব দিচ্ছি যে @ এঞ্জোটিব উত্তরটি সহজভাবে সম্পাদনা করুন grep $'\t'
তিমু লইস্তি

এটি জোর দেওয়া উচিত যে এটি বাশের একটি বৈশিষ্ট্য এবং অন্য কিছু শেল (যেমন ড্যাশ, যা উবুন্টু এবং অন্যদের উপর শেল স্ক্রিপ্টগুলির জন্য ডিফল্ট) দ্বারা কার্যকর করা হলে ভুল কাজটি করবে
xjcl


1

ট্যাবটির জন্য যে কোনও একটি সর্বদা আসকি হেক্স-কোড ব্যবহার করে অবলম্বন করতে পারে:

$ echo "one"$'\t'"two" > input.txt                                 

$ grep -P "\x9" input.txt                                          
one two

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