পাঠ্যে রেজেক্সকে হাইলাইট করে এমন কমান্ড?


14

পাঠ্য একটি নির্দিষ্ট অভিব্যক্তি হাইলাইট যে একটি কমান্ড আছে?

আমি খুব কম 'অনুসন্ধান' ফাংশনের মতো সন্ধান করছি, তবে স্ট্যান্ডআউটে lessদর্শকের পরিবর্তে সাধারণ পাঠ্য আউটপুট সহ ।

উদাহরণ:

$ cat test.txt | highlight "an"

প্রসপেক্টস ফর একটি Afgh থেকে সুশৃঙ্খল ন্যাটো প্রত্যাহার একটি IST একটি প্রেসিডেন্ট হামিদ কারজাই যেমন ভোগ করে দুই কোনও setbacks DEM একটি মার্কিন যুক্তরাষ্ট্র সৈন্য উপর Ded সীমা একটি ঘ তালিব একটি স্থগিত শান্তি আলোচনা।

এটি নির্দিষ্ট নিয়মিত অভিব্যক্তি হাইলাইট করতে রঙ বা অন্য কোনও উপায় ব্যবহার করতে পারে।



@ গিলিস, কিছুটা হলেও এই প্রশ্নের আরও জটিল জটিলতা ছিল।
সিজেএম

উত্তর:


17

এটি কোনও বৈশিষ্ট্যের কারণে বা কিছু লুকিয়ে থাকা পার্শ্ব প্রতিক্রিয়ার কারণে হয়েছে কিনা তা নিশ্চিত নয় তবে এটি জিএনইউ grep২.১১ তে কাজ করে :

grep --color 'an\|' test.txt

10
এটি আপনি করছেন মত grep 'an' OR ''''সফলভাবে ইনপুট প্রতিটি অবস্থানে কিছুই মেলে। কেবলমাত্র anহাইলাইট করা হয়, কারণ আপনি কিছুই হাইলাইট করতে পারবেন না। :-)
মাইকেল

বিশুদ্ধ প্রতিভা. এটি আমার পক্ষে কাজ করে না, তবে grep --color -e 'an' -e ' '(কোনও জায়গার সাথে মিলে যা রঙিন হতে পারে না)। পাইপিংয়ের চেয়ে উপায় ভাল sed -e ''/an/s//$(printf "\033[33;1m&\033[0m")/''তবে সম্ভবত পরবর্তীটি আরও পারফরম্যান্ট। অন্য অনুসন্ধান শব্দটির জন্য 'একটি' পরিবর্তন করুন। ;)
sjas

কি দারুন! আমি এটি সমস্ত bashrcকমনপত্রে তালিকার জন্য ব্যবহৃত কমান্ডটি সংশোধন করতে ব্যবহার করেছি এবং এখন আমার সমস্ত এলিয়াস লাল রঙে হাইলাইট করা হয়েছে। সুপার! alias aliases="clear;cat ~/.bashrc|grep --color \"alias\""
নভে

9

ack এর একটি --passthruবিকল্প রয়েছে যা এটি করবে:

ack --passthru an test.txt
some_command | ack --passthru an -

2
(+1) বিটিডাব্লু: উবুন্টু রেপোতে, প্যাকেজটি (এবং এক্সিকিউটেবল) বলা হয় ack-grep... (নামটি ackএকটি কানজি কোড রূপান্তরকারীটিতে প্রয়োগ করা হয়)
পিটার.ও

2

আমার এই স্ক্রিপ্টটি চেষ্টা করে দেখতে পারেন। এটি আপনাকে একটি ফাইল নির্দিষ্ট করতে দেয় বা এটি স্ট্যান্ডার্ড ইনপুট নেয়। আপনি যে পাঠ্যটি হাইলাইট করতে চান তার জন্য আপনি পাইথন নিয়মিত অভিব্যক্তি সংজ্ঞায়িত করতে পারেন। নিয়ন সবুজ রঙে হাইলাইট করা পাঠ্য ডিফল্ট (আরে আমি একটি কালো পটভূমি ব্যবহার করি!) তবে আপনি এএনএসআই রঙ কোড পরিবর্তন করতে পারেন ।

#!/usr/bin/env python

import sys
import re

def highlight_text(text,pat):
    def replacement_funk(matchobj):  return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
    return re.sub(pat,replacement_funk,text)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        input = sys.stdin
        pat = sys.argv[1]
    elif len(sys.argv) == 3:
        input = open(sys.argv[2])
        pat = sys.argv[1]
    else:
        sys.stderr.write("colorme pattern [inputfile]")
    text = input.read()
    print highlight_text(text,pat)

এখানে একটি উদাহরণ।

blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an

প্রসপেক্টস ফর একটি Afgh থেকে সুশৃঙ্খল ন্যাটো প্রত্যাহার একটি IST একটি প্রেসিডেন্ট হামিদ কারজাই যেমন ভোগ করে দুই কোনও setbacks DEM একটি মার্কিন যুক্তরাষ্ট্র সৈন্য উপর Ded সীমা একটি ঘ তালিব একটি স্থগিত শান্তি আলোচনা।

blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt

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


স্ট্যাকেক্সচেঞ্জের বোল্ড মার্কআপটি মজাদার মনে হয় এবং আউটপুটটিতে অতিরিক্ত বড়গুলি কেন থাকে ts আমাকে মারধর করে
fthinker

আপনার <b>যদি কোনও শব্দের কিছু অংশ বোল্ডফেস করতে হয় তবে ব্যবহার করুন ।
সিজেএম

0

$cat test.txt | grep --colour=auto -C 100000 an

"রঙ" কাজ করে। গ্রেপকে সর্বদা বিকল্পটি ব্যবহার করতে আপনি একটি উপনামও সংজ্ঞায়িত করতে পারেন:

alias grep='grep --colour=auto -C 100000'

উপরের স্থানটি /etc/profile.d/ এ কোথাও বা আপনার .bashrc বা যাই হোক না কেন রাখুন।


1
এটি কেবল মিলিত লাইনগুলি মুদ্রণ করে। ফ্র্যাঙ্ক পুরো টেক্সটটি চায়, কেবল ম্যাচগুলি হাইলাইট করে।
সিজেএম

উপরেরটিতে একটি-সি যুক্ত করা হয়েছে - এটি কাজ করে তবে কিছুটা অগোছালো!
gerdesj

3
এটি কাজ করে তবে আপনার গ্রেপ নামে একটি উপন্যাস তৈরি করা উচিত নয় । আপনার সাথে -C 1000000আর কখনও গ্রেপ করতে সক্ষম হবেন না। কেবল alias highlight='grep --colour=auto -C 1000000'. The cat in the first example is also not necessary: গ্রেপ --colour = অটো-সি 100000 ফাইল` করুন `
মাত্তেও

আমি আশ্চর্য হয়েছি যে এটি একটি বড় ফাইলটিতে কত স্মৃতি গ্রাস করবে। (আমি grepপ্রসঙ্গের লাইনের সংগ্রহ কীভাবে পরিচালনা করি তা কখনই দেখিনি ))
সিজেএম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.