রঙ সহ একটি ফাইলে একটি গ্রেপের আউটপুট সংরক্ষণ করা


36

আমাকে গ্রেপ কমান্ডের ফলাফলটি একটি ফাইলে সংরক্ষণ করতে হবে, তবে আমি আউটপুট ফাইলটিও ফর্ম্যাট করতে এবং টার্মিনালের মতো রঙগুলি রাখতে চাই।

এটা করার কোন উপায় আছে? হতে পারে গ্রাপকে কিছু ধরণের মার্কআপ ভাষার জন্য সংরক্ষণ করুন? যদি এটি সম্ভব না হয় তবে এই কাজটি সম্পাদন করতে পারে এমন অন্য কোনও সরঞ্জাম আছে কি?

আমি অনুসন্ধান কীওয়ার্ডটি আউটপুট ফাইলে দাঁড় করানোর চেষ্টা করছি ঠিক যেমন এটি টার্মিনালে রয়েছে।

উত্তর:


42

মার্কআপটি ধরে রাখতে আপনার কেবল একটি পাঠ্য ফাইলের চেয়ে বেশি কিছু দরকার। রঙগুলি রাখতে আমি এইচটিএমএল আউটপুট ব্যবহার করব।

  • আহা ইনস্টল করুন অর্থাৎ " ইউনিক্স টার্মিনালের এএনএসআই পলায়নের অনুক্রমকে এইচটিএমএল কোডে রূপান্তর করুন " এ

    sudo apt-get install aha
  • তারপরে আপনার grep(বা ls) আউটপুটটি এভাবে সংরক্ষণ করুন :

    ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html

    বিকল্প:

    --black param to set background as black color
    --title param to set the title for HTML page
    

এর মাধ্যমে ফাইল এক্সটেনশনের জন্য সিনট্যাক্স হাইলাইট pygmentize

  • ইনস্টল করুন pygmentize:

    sudo apt-get install python-pygments
  • তারপরে এই জাতীয় আদেশ চালান:

    pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html

এখানে চিত্র বর্ণনা লিখুন


1
অই !! , আহা সত্যিই একটি দুর্দান্ত সরঞ্জাম, আমি ঠিক যা খুঁজছিলাম, ধন্যবাদ !!
মোহা সর্বশক্তিমান উট

2
@ এমএইচডি.টাহাবি: আমি আমার উত্তরটি আপডেট করেছি যাতে আপনি কোডের রঙগুলি রাখতে পারেন (আপনার ক্ষেত্রে পার্ল), তবে pygmentizeঅন্য অনেকের সাথে কাজ করে।
সিলভাইন পাইনাউ

10

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

grep --color=always "stuff" input.txt > output.txt

এখন, আপনি যখন কনসোলে ফাইলটি প্রিন্ট করবেন তখন এটি রঙগুলি দিয়ে মুদ্রিত হবে, কারণ বাশ সেই অক্ষরগুলিকে "এই রঙটি ব্যবহার করুন" হিসাবে ব্যাখ্যা করে।

cat output.txt

তবে আপনি যদি এটিকে এডিটর হিসাবে পছন্দ করেন তবে vimকিছু অদ্ভুত চরিত্র পাবেন। উদাহরণস্বরূপ, যখন আমি কমান্ডগুলি ব্যবহার করি

echo "A sentence. A red sentence. Another sentence." \
  | grep --color=always "A red sentence" > output.txt

আউটপুট অধিকার মনে হচ্ছে যখন আমি ব্যবহার করে এটি প্রিন্ট catকিন্তু যখন আমি এটি খোলার মধ্যে vimআমি পেতে

A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.

সুতরাং আপনি যদি কোনও সম্পাদক ব্যবহার করতে চান তবে এটি সম্ভবত আপনি চান তা নয়।


সঠিক !!, আমি মাঝে মাঝে সেই বিচিত্র চিহ্নগুলি পেয়ে যাচ্ছিলাম এবং সেগুলি কী তা বুঝতে পারি নি।
মোহা সর্বশক্তিমান উট

আপনার উত্তরটি কতটা সহজ / কার্যকর তা আমি সত্যিই পছন্দ করি। শুধু আউটপুট বিড়াল :)। এটি স্বল্প সময়ের জন্য দুর্দান্ত (এখনই আমার পক্ষে যথেষ্ট যথেষ্ট)।
ট্রেভর বয়েড স্মিথ

বিশদ বিবরণ: এটি টার্মিনাল (এমুলেটর), বাশ নয়, যা রঙ পালানোর ক্রমগুলি ব্যাখ্যা করে (ওরফে অদ্ভুত অক্ষর)।
মাস্টারেক্সিলো

2

আমি যদি সঠিকভাবে বুঝতে পারি তবে আপনি কোনও টেক্সট ফাইলে একটি টার্মিনাল আউটপুট সংরক্ষণ করতে চান, তাই না? তবে আপনি এটি রঙের সাথে ফর্ম্যাট করতে চান। যদি এটি হয় তবে এখানে আমার ধারণাগুলি রয়েছে:

আউটপুটটি স্বয়ংক্রিয়ভাবে হাইলাইট করা

আপনি সম্ভবত জানেন যে আপনি যদি কোনও গ্রাট আউটপুট একটি পাঠ্য ফাইলের মধ্যে ক্যাপচার করেন তবে ঠিক এটি কারণ এটি কোনও পাঠ্য ফাইল এটি বিন্যাস করা যায় না। সুতরাং, যতদূর আমি জানি, আপনি এটি সহজ উপায়ে করতে পারবেন না।

এটি সত্ত্বেও একটি সাধারণ কাজ রয়েছে, আপনার পাঠ্য সম্পাদককে বুঝতে হবে যে কোন ধরণের ফাইল খুলছে। উদাহরণস্বরূপ, ধরা যাক যে আপনার গ্রেপ আউটপুটটিতে কিছু বাশ উপাদান রয়েছে, সুতরাং ব্যাশ হাইলাইটগুলি আপনার পক্ষে কাজ করে (উপায় দ্বারা, এগুলি প্রায়শই রঙ যা আপনি টার্মিনালের একটি রঙিন আউটপুটে দেখেন)। সুতরাং কৌশলটি হ'ল সঠিক এক্সটেনশান সহ কোনও ফাইলে পাঠ্য আউটপুট সংরক্ষণ করা। পরিবর্তে এরকম কিছু করার পরিবর্তে:

ls | grep something > output

আপনি যেতে পারেন

ls | grep something > output.sh

যা জিডিট তৈরি করবে (বা কোনও শালীন পাঠ্য সম্পাদক) স্বয়ংক্রিয়ভাবে স্বীকৃতি দেবে যে আপনি বাশ কোড সম্পর্কে কথা বলছেন, এবং সেই অনুযায়ী এটি হাইলাইট করবে। আপনার আউটপুট রঙ করার দরকার নেই, প্রোগ্রামটি এটি খোলার কোডের স্বীকৃতি যদি দেয় তবে তা এটি আপনার জন্য করবে। আপনি যদি অন্য ধরণের ফর্ম্যাটগুলির সাথে কাজ করছেন, তবে আপনি কীভাবে গ্রেপিং করছেন তার (যেমন> আউটপুট.এক্সএমএল,> আউটপুট.ইচটিএমএল,> আউটপুট.পি ... ইত্যাদি) আরও ভালভাবে সামঞ্জস্য করুন the শুভকামনা! :)

আউটপুট ফাইলের কিছু শব্দ হাইলাইট করা

সুতরাং, যদি আমি এটি পাই তবে আপনি যে শব্দগুলি অনুসন্ধান করেছেন সেগুলি হাইলাইট করতে চান। আবার, এটি একটি সরল পাঠ্য ফাইলে করা যায় না কারণ এটি একটি সরল পাঠ্য। তবে আপনি এটিতে খুব সহজ উপায়ে কিছু ফর্ম্যাট যুক্ত করতে পারেন যেমন কিছু এইচটিএমএল কোডিং ব্যবহার করে। এটি আপনার আউটপুটটিকে এইচটিএমএল কোডে রূপান্তরিত করবে এবং আপনি যখন এইচটিএমএল (লাইব্রোফাইস লেখক, ফায়ারফক্স এবং 10000 এসটেসারস) ব্যাখ্যা করতে সক্ষম কোনও প্রোগ্রাম দিয়ে খুলবেন তখন আপনি কিছু শব্দ হাইলাইটেড দেখতে পাবেন।

এটি করতে, আসুন এটি আপনার গ্রেপ, এইচটিএমএলে রফতানি করা যাক:

ls | grep keytext > output.html

এবং এখন আপনি আপনার আউটপুটে কীটেক্সটটি হাইলাইট করতে চান । এটি করার জন্য আপনি সেড ব্যবহার করতে পারেন , যেমন:

sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html

এবং ভাইওল, এখন আপনার কীটেক্সটটি লাল রঙে হাইলাইট করা হয়েছে।


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

ঠিক আছে, তাই, আপনি রঙ দিয়ে কিছু গ্রেপ করছেন? এইচটিএমএল কোডের মতো? আপনি যদি ইনপুটটিতে রঙ দেখেন তবে এটি ফর্ম্যাট করতে হবে এবং তাই কোথাও কোডিং করতে হবে, যেমন "ফন্টক্লোর: লাল", তাই না? যদি এটি হয় তবে আপনার গ্রেপের ফর্ম্যাট কোডটি অন্তর্ভুক্ত করার দরকার হতে পারে। :)
রোহ

ঠিক আছে, প্রশ্নের সম্পাদনা সহ আমি এটি পেয়েছি। :) আপনি কোন আউটপুট এক্সটেনশন ব্যবহার করছেন?
রোহ

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