ইউনিক্স-এ একটি ট্যাব গ্রেপ করুন


417

আমি grepইউনিক্স প্ল্যাটফর্মে ফাইলগুলিতে কীভাবে ট্যাব করব (\ t)?


53
শুধু ব্যবহার grep "<Ctrl+V><TAB>": এটি কাজ করে (টাইপ যদি প্রথমবার grep "তারপর Ctrl + ভী কী কম্বো, তারপর TAB কী টিপুন, তারপর টাইপ করুন "এবং হিট লিখুন, ভিওলা!)
দাড়কাক

16
ctrl + v আসলেই বাজে আইডিয়া! ... হ্যাঁ এটি কনসোল কমান্ড থেকে কাজ করতে পারে, তবে এটি কোনও স্ক্রিপ্টে এটি টাইপ করা কাজ করতে পারে না (আপনি সম্পাদকের করুণায় রয়েছেন, উদাহরণস্বরূপ আমি সেখানে ম্যাসিডিট এবং সিটিআর + ভি ব্যবহার করি না)
তদন্তকারী


উত্তর:


374

যদি জিএনইউ গ্রেপ ব্যবহার করে থাকেন তবে আপনি পার্ল-স্টাইলের রেজিপ্সপ ব্যবহার করতে পারেন:

grep -P '\t' *

এটি আমার ধাঁচের বিরুদ্ধে কাজ করছে বলে মনে হচ্ছে না। এই সিনট্যাক্সটি ব্যবহার করার চেষ্টা করছে না কিছুই ints (ম্যাক ওএস এক্স রূপটি কি অন্যরকম?)
ভবিষ্যতে

2
@ ফিউচারেলাইট: অ্যাপলের ডক্স ( বিকাশকারী.অ্যাপল. com/ ম্যাক / লাইবারি / ডকুমেন্টেশন / ডারউইন / রেফারেন্স / /) অনুসারে , ম্যাক ওএস এক্স গ্রেপ প্রোগ্রামটি -P বিকল্পটি সমর্থন করবে। সুপারউজার ডটকম-এ একটি নতুন প্রশ্ন তৈরি করার কথা বিবেচনা করুন।
বিনোদন

3
এটি জিএনইউ ইউনিক্সের পক্ষে খুব ভাল, তবে পসিক্স সোলারিস, এআইএক্স এবং এইচপি-ইউএক্সের কী হবে? যারা -Pবিকল্প সম্পর্কে কিছু জানেন না ।
দাড়কাক

21
@ গ্রুক জিএনইউ'র ইউনিক্স নয়।
লিলি চুং

5
ম্যাক ওএসএক্সে আপনি -e ব্যবহার করে প্যাটার্ন দিতে পারেন
ফয়সাল ফিরোজ

314

কৌশলটি হ'ল একক উদ্ধৃতিগুলির আগে চিহ্নটি ব্যবহার করা । এটি কাটা এবং অন্যান্য সরঞ্জামগুলির জন্যও কাজ করে।

grep $'\t' sample.txt

7
জীবন বাঁচাতে টিপস জীবন বাঁচায়! এটি zshযেমন কাজ করে ততদূর আমি বলতে পারি। আপনি কি মন্তব্য করতে পারেন যে চিহ্নটির শব্দার্থক $শব্দটি কী?
রোমেন

2
স্ট্রিংয়ে '\ t' ব্যতীত অন্য কিছু থাকলে কাজ করে না। উদাহরণস্বরূপ আপনি কীভাবে "\ t" (ট্যাব + স্পেস) অনুসন্ধান করবেন?
রমন

6
রমন: আপনি ব্যবহার করতে পারেন $'\t'' '। একটি বাস্তব উদাহরণ শো এটা SH (না শুধুমাত্র ব্যাশ, যা ডিফল্টভাবে Android এর উপর ইনস্টল করা নয়) সঙ্গে আরো কাজ করে busybox grep -oE '^nodev'$'\t''fuse$' /proc/filesystems
v6ak

5
আমি মনে করি $ '...' বাশ প্রতিমা। সম্ভবত sh এ কাজ করে না। সিএনএস বা টিসিএসএস সম্পর্কে ডুনো।
এডওয়ার্ড ফালক

5
'ম্যান বাশ' থেকে: ফর্মের শব্দগুলি 'স্ট্রিং' বিশেষভাবে চিকিত্সা করা হয়। শব্দটি স্ট্রিংয়ে প্রসারিত হয়, এএনএসআই সি স্ট্যান্ডার্ড অনুসারে ব্যাকস্ল্যাশ-পলায়নযুক্ত অক্ষর প্রতিস্থাপন করা হয়েছিল। ব্যাকস্ল্যাশ পালানোর সিকোয়েন্সগুলি উপস্থিত থাকলে ডিকোড করা হয় ...
ব্রাউন

84

আমি গ্রিপ দিয়ে '\ t' মেটাচার্যাক্টর কাজটি কখনও পরিচালনা করতে পারি নি। তবে আমি দুটি বিকল্প সমাধান পেয়েছি:

  1. ব্যবহার <Ctrl-V> <TAB>(আঘাত জন্য Ctrl-ভি তারপরে TAB টাইপ)
  2. কর্কশ ব্যবহার: foo | awk '/\t/'

4
| awk '/\t/'সমাধান সব শাঁস, প্লাটফর্ম এবং সিস্টেম জন্য কাজ করবে।
সামভিন

6
পোর্টেবল পসিক্স সমাধানের জন্য +1 এবং বাশিজম, জ্যাশিজম, জিএনইউজম এবং লিনাক্সিজম ব্যবহার না করা।
জেনস

1
আপনি যদি কপি-পেস্ট করতে চান (আপনার নোট বা কোনও স্ক্রিপ্ট থেকে) সিটিআরএল-ভি কার্যকর নয়। দৃশ্যমান '\ টি' রয়েছে এমন একটি স্পষ্ট সমাধানটি ব্যবহার করা আরও ভাল, আক্ষরিক টিএবিগুলি (যেমন সাদা অংশের মতো দেখতে লাগে) প্রায়শই এসপিসিতে রূপান্তরিত হয় ... কপিপিসট করার সময় ...
plijnzaad

awkএখানে ভাল কাজ করে তবে খুব বড় ফাইলগুলির সাথে আমার মেশিনে কিছু পরীক্ষায় এটি ব্যবহারের চেয়ে 30% ধীর grep -P। এটি ব্যবহারের ক্ষেত্রে ভিত্তিতে তুচ্ছ এবং অপ্রাসঙ্গিক হতে পারে, এবং awkসহজভাবে পঠনযোগ্যতা এবং বহনযোগ্যতার জন্য ভাল হতে পারে।
theferrit32

43

জিজ্ঞাসা উবুন্টু এই উত্তর থেকে :

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

grep -P "\t" <file name>

আক্ষরিক ট্যাব অক্ষর ব্যবহার করুন:

grep "^V<tab>" <filename>

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

grep "$(printf '\t')" <filename>

1
হুবহু অনুকরণ http://askubuntu.com/a/53096/453741
villapx

আপনি যদি কপি-পেস্ট করতে চান (আপনার নোট বা কোনও স্ক্রিপ্ট থেকে) সিটিআরএল-ভি কার্যকর নয়। দৃশ্যমান '\ টি' রয়েছে এমন একটি স্পষ্ট সমাধানটি ব্যবহার করা আরও ভাল, আক্ষরিক টিএবিগুলি (যেমন সাদা অংশের মতো দেখতে লাগে) প্রায়শই এসপিসিতে রূপান্তরিত হয় কপিরাইট পেস্ট করার সময়
plijnzaad

31

একটি উপায় (এটি বাশের সাথে রয়েছে)

grep -P '\t'

-P পার্ল নিয়মিত এক্সপ্রেশনগুলি চালু করে যাতে work t কাজ করবে।

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


কেএস শেলের অজানা পি বিকল্প
শচীন চৌরাসিয়া

আনইন্ডাইন্ড যেমন বলেছে, জিএনইউ গ্রেপের সাথে সুনির্দিষ্ট হতে পারে। শুধু স্পষ্ট করা হয়েছে।
tjmoore

আপনি কীভাবে একটি ট্যাব যুক্ত করবেন? আপনি যখন ট্যাব বোতাম টিপেন তখন এটি স্বয়ংক্রিয় সম্পূর্ণ প্রক্রিয়া শুরু করে না? (এটি কোনও বাশ স্ক্রিপ্টে কাজ করতে পারে তবে কমান্ড লাইনে নয়)
আন্তোনিওসিএস

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

2
-পি গ্রেপের সাথে নির্দিষ্ট, কোনও শেলের সাথে নয়।
-পি

13

আক্ষরিক অর্থে ট্যাবটি সন্নিবেশ করার আরেকটি উপায় হ'ল $'\t'বাশের মধ্যে স্বল্প-জানা কোটেশনটি ব্যবহার করা :

grep $'foo\tbar'        # matches eg. 'foo<tab>bar'

(মনে রাখবেন যে আপনি যদি স্থির স্ট্রিংয়ের সাথে মিলে থাকেন তবে আপনি এটি '-F' মোডের সাথে ব্যবহার করতে পারেন))

কখনও কখনও ভেরিয়েবলগুলি ব্যবহার করে স্বরলিপিটি কিছুটা বেশি পঠনযোগ্য এবং পরিচালিত হয়:

tab=$'\t'               # `tab=$(printf '\t')` in POSIX
id='[[:digit:]]\+'
name='[[:alpha:]_][[:alnum:]_-]*'
grep "$name$tab$id"     # matches eg. `bob2<tab>323`

10

এটি ঠিক আপনি যা খুঁজছেন তা নয়, তবে এটি আপনার ক্ষেত্রে কার্যকর হতে পারে

grep '[[:blank:]]'

সমতুল্য

grep -P '[ \t]'

সুতরাং এটি স্পেস এবং ট্যাবটি খুঁজে পাবে।

§ চরিত্রের ক্লাস

দ্রষ্টব্য, এটি আমার বিজ্ঞাপন করা হয় নি man grep, তবে এখনও কাজ করে

gre man grep | গ্রেপ ফাঁকা | wc-
      0 0 0

@ এ-লেটব্বি এটি সম্পাদনার সাথে এখন কাজ করে - -Pযুক্তি যুক্ত করা হয়েছিল।
ভিলাপেক্স

6

আপনার জন্য ট্যাব sertোকাতে ইকো ব্যবহার করুন grep "$(echo -e \\t)"


6

এটি সম্বোধনের মূলত দুটি উপায় রয়েছে:

  1. ( প্রস্তাবিত ) গ্রেপ (1) দ্বারা সমর্থিত নিয়মিত এক্সপ্রেশন সিনট্যাক্স ব্যবহার করুন। আধুনিক গ্রেপ (1) দুটি পসিক্স 1003.2 রিজেক্স সিনট্যাক্সকে সমর্থন করে: বেসিক (অপ্রচলিত) আরইএস এবং আধুনিক আরইএস। সিনট্যাক্সটি পুনরায় ফর্ম্যাট (7) এবং রেজেেক্স (7) ম্যান পৃষ্ঠাগুলির বিবরণে বর্ণিত হয়েছে যা যথাক্রমে বিএসডি এবং লিনাক্স সিস্টেমের অংশ। জিএনইউ গ্রেপ (1) পিসি (3) লাইব্রেরি দ্বারা সরবরাহিত পার্ল-সামঞ্জস্যপূর্ণ আরইএসকে সমর্থন করে।

    রেজেক্স ভাষায় ট্যাব প্রতীকটি সাধারণত \tঅণু দ্বারা এনকোড থাকে। পরমাণুটি BSD বর্ধিত নিয়মিত এক্সপ্রেশন ( egrep, grep -EBSD সামঞ্জস্যপূর্ণ সিস্টেমে), পাশাপাশি পার্ল-সামঞ্জস্যপূর্ণ আরইএস ( pcregrep, জিএনইউ grep -P) দ্বারা সমর্থিত ।

    উভয় প্রাথমিক নিয়মিত এক্সপ্রেশন এবং লিনাক্স বর্ধিত আরইগুলির স্পষ্টতই এর জন্য কোনও সমর্থন নেই \t। কোন রেগেক্স ভাষাটি সমর্থন করে তা জানার জন্য দয়া করে ইউনিক্স ইউটিলিটি ম্যান পৃষ্ঠার সাথে পরামর্শ করুন (সুতরাং সেড (1), আর্ক (1), এবং প্যাকগ্রিপ (1) নিয়মিত এক্সপ্রেশনগুলির মধ্যে পার্থক্য)।

    অতএব, লিনাক্সে:

    $ grep -P '\t' FILE ...
    

    বিএসডি একই পদ্ধতিতে:

    $ egrep '\t' FILE ...
    $ grep -E '\t' FILE ...
    
  2. প্যাটার্নে ট্যাব চরিত্রটি পাস করুন। আপনি কোনও স্ক্রিপ্ট ফাইল সম্পাদনা করার সময় এটি সোজা হয়:

    # no tabs for Python please!
    grep -q '   ' *.py && exit 1
    

    তবে, ইন্টারেক্টিভ শেলটিতে কাজ করার সময় আপনাকে লাইনে সঠিক চিহ্নটি টাইপ করতে শেল এবং টার্মিনাল সক্ষমতার উপর নির্ভর করতে হবে। বেশিরভাগ টার্মিনালগুলিতে এটি Ctrl+ Vকী সংমিশ্রণের মাধ্যমে করা যায় যা পরবর্তী ইনপুট চরিত্রটিকে আক্ষরিকভাবে আচরণ করতে নির্দেশ দেয় (এটি V"ভার্ব্যাটিম" এর জন্য):

    $ grep '<Ctrl>+<V><TAB>' FILE ...
    

    কিছু শেল কমান্ড টাইপসেটিংয়ের জন্য উন্নত সহায়তা সরবরাহ করতে পারে। যেমন, বাশ (1) ফর্মের শব্দগুলিকে $'string'বিশেষভাবে চিকিত্সা করা হয়:

    bash$ grep $'\t' FILE ...
    

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

    বোর্ন শেলের জন্য (এবং কেবলমাত্র নয়) একই আচরণটি প্রিন্টফ (1) দ্বারা যথাযথ রেজেক্স নির্মাণের জন্য বিকল্প কমান্ড বিকল্প ব্যবহার করে অনুকরণ করা যেতে পারে:

    $ grep "`printf '\t'`" FILE ...
    

4

grep "$(printf '\t')" ম্যাক ওএস এক্সে আমার জন্য কাজ করেছেন


2

গাওক ব্যবহার করুন, ফিল্ড ডিলিমিটারটি ট্যাবে (\ t) সেট করুন এবং ক্ষেত্রের সংখ্যা পরীক্ষা করুন। যদি 1 এর বেশি হয় তবে ট্যাবগুলি আছে / আছে

awk -F"\t" 'NF>1' file

2
এটি কিছুটা ওভারকিল, এবং প্রশ্নটি মিস করে। awk /\t/বিকল্পের প্রশ্নের জন্য যথেষ্ট।
সীমিত প্রায়শ্চিত্ত

2

'শেড হিসাবে গ্রেপ হিসাবে' ব্যবহার করা একটি ভাল পছন্দ (এই ক্লাসিক্যাল সেড টিউটোরিয়ালে বর্ণিত )।

sed -n 's/pattern/&/p' file

উদাহরণ (বাশ, শ, খ, সিএস, .. এ কাজ করে):

[~]$ cat testfile
12 3
1 4 abc
xa      c
        a       c\2
1 23

[~]$ sed -n 's/\t/&/p' testfile 
xa      c
        a       c\2

[~]$ sed -n 's/\ta\t/&/p' testfile
        a       c\2

1

+1 উপায়, যা ksh, ড্যাশ ইত্যাদিতে কাজ করে: টিএবি sertোকাতে প্রিন্টফ ব্যবহার করুন:

grep "$(printf 'BEGIN\tEND')" testfile.txt

এটি আমার পক্ষে উবুন্টু ট্রাস্টিতে (বাশ ৪.৩.১১) কাজ করেন নি, নিম্নলিখিতগুলি যদিও কাজ করেছে:grep "$(printf '\t')" testfile.txt
জোশ রুম্বুট

0

উত্তরটি সহজ। আপনার গ্রেপ লিখুন এবং উদ্ধৃতিতে ট্যাব কী টাইপ করুন, এটি কমপক্ষে ksh এ ভালভাবে কাজ করে

grep "  " *

3
প্রথমে আপনার শেলের মধ্যে একটি ট্যাব অক্ষর ইনপুট করার জন্য আপনাকে পরিচালনা করতে হবে - বেশিরভাগ শেলগুলি এই কীটি একটি কমান্ড (সমাপ্তি) হিসাবে ব্যাখ্যা করে
কেই


0

'সেড-এ-গ্রেপ' পদ্ধতিটি ব্যবহার করে, তবে ব্যক্তিগত পছন্দের দৃশ্যমান চরিত্রের সাথে ট্যাবগুলি প্রতিস্থাপন করা আমার প্রিয় পদ্ধতি, কারণ এটি স্পষ্টভাবে দেখায় যে কোন ফাইলগুলিতে অনুরোধ করা তথ্য রয়েছে এবং এটি লাইনগুলির মধ্যে কোথায় রাখা হয়েছে:

sed -n 's/\t/\*\*\*\*/g' file_name

আপনি যদি লাইন / ফাইল তথ্য, বা অন্যান্য গ্রেপ বিকল্পগুলি ব্যবহার করতে চান তবে ট্যাব অক্ষরের দৃশ্যমান প্রতিস্থাপনটি দেখতে চান তবে আপনি এটি অর্জন করতে পারেন

grep -[options] -P '\t' file_name | sed 's/\t/\*\*\*\*/g'

উদাহরণ হিসাবে:

$ echo "A\tB\nfoo\tbar" > test
$ grep -inH -P '\t' test | sed 's/\t/\*\*\*\*/g'
test:1:A****B
test:2:foo****bar

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


0

এটি এআইএক্সের জন্য ভাল কাজ করে। আমি ধারণকারী লাইন অনুসন্ধান করছিJOINED<\t>ACTIVE

voradmin cluster status | grep  JOINED$'\t'ACTIVE

 vorudb201   1       MEMBER(g) JOINED        ACTIVE
*vorucaf01   2       SECONDARY JOINED        ACTIVE

0

আপনি ব্যবহার করতে পারেন grep "$(echo -e '\t')"

শুধুমাত্র প্রয়োজন echoব্যাকস্ল্যাশ পলায়নের ব্যাখ্যা করতে সক্ষম হওয়া প্রয়োজন ।


0

এই বিকল্প বাইনারি সনাক্তকরণ পদ্ধতিগুলি সম্পূর্ণ কার্যকরী। এবং, আমি সত্যিই কারও এর মতো অ্যাঞ্জ ব্যবহার করা পছন্দ করি, কারণ আমি একক বাইনারি চরগুলির সাথে বাক্যবিন্যাসের ব্যবহারটি খুব মনে করতে পারি নি। তবে একটি পসিক্স পোর্টেবল ফ্যাশনে (যেমন টিএবি = echo "@" | tr "\100" "\011") একটি শেল ভেরিয়েবলের একটি মান নির্ধারণ করাও সম্ভব হবে এবং তারপরে পসিক্স পোর্টেবল ফ্যাশনে এটিকে সেখান থেকে সর্বত্র নিয়োগ করা উচিত; পাশাপাশি (যেমন গ্রেপ "$ ট্যাব" ফাইলের নাম)। যদিও এই সমাধানটি টিএবির সাথে ভালভাবে কাজ করে, এটি অন্যান্য বাইনারি চরগুলিও ভালভাবে কাজ করবে, যখন অন্য কোনও পছন্দসই বাইনারি মান অ্যাসাইনমেন্টে ব্যবহৃত হবে (TAB অক্ষরের জন্য 'টিআর'র পরিবর্তে মানটির পরিবর্তে)।


0

অন্যান্য উত্তরে প্রদত্ত $ '\ t' স্বরলিপিটি শেল-নির্দিষ্ট - এটি ব্যাশ এবং zsh তে কাজ করে বলে মনে হচ্ছে তবে সর্বজনীন নয়।

দ্রষ্টব্য: fishনীচেটি শেলের জন্য এবং ব্যাশে কাজ করে না :

ইন fishশেল, এক একটি unquoted ব্যবহার করতে পারেন \tউদাহরণস্বরূপ:

grep \t foo.txt

অথবা কেউ হেক্স বা ইউনিকোড স্বরলিপি ব্যবহার করতে পারে যেমন:

grep \X09 foo.txt
grep \U0009 foo.txt

(এই স্বরলিপিগুলি আরও রহস্যময় চরিত্রগুলির জন্য দরকারী)

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

grep "foo"\t"bar"

-4

আপনি টাইপ করতে পারেন

গ্রেপ f t ফু

অথবা

গ্রেপ '\ t' ফু

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


-6

অনেকবার ফাঁকা জায়গা অনুসন্ধান করুন [[: স্পেস:]] *

গ্রেপ [[: স্পেস:]] * '।' '।'

এর মতো কিছু পাবেন:

'ট্যাব' ..

এগুলি একক উদ্ধৃতি ('), এবং দ্বিগুণ নয় (")
gre

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