লিনাক্স 'স্ক্রিপ্ট' কমান্ডের আউটপুট কীভাবে পরিষ্কার করবেন


35

আমি কিছু ইন্টারেক্টিভ সেশন ট্র্যাক করতে লিনাক্স 'স্ক্রিপ্ট' কমান্ড http://www.linuxcommand.org/man_pages/script1.html ব্যবহার করছি । যেগুলি থেকে আউটপুট ফাইলগুলিতে আমার ব্যাকস্পেস কীস্ট্রোক সহ অরক্ষিত অক্ষর রয়েছে।

এই আউটপুট ফাইলগুলিকে পরিষ্কার করার কি কোনও উপায় আছে যাতে সেগুলি কেবল স্ক্রিনে প্রদর্শিত হয়েছিল তা ধারণ করে?

বা একটি ইন্টারেক্টিভ শেল সেশন রেকর্ড করার অন্য উপায় আছে (ইনপুট এবং আউটপুট)?


"বা ইন্টারেক্টিভ শেল সেশন (ইনপুট এবং আউটপুট) রেকর্ড করার অন্য কোনও উপায় আছে কি?" আপনি কি asciinema.org জানেন ?
মাস্টারেক্সিলো

উত্তর:


34

আপনি যদি ফাইলটি দেখতে চান তবে আপনি আউটপুটটি পাঠাতে পারেন col -bp; এটি নিয়ন্ত্রণ অক্ষর ব্যাখ্যা করে। আপনি যদি চান তবে আপনি কম মাধ্যমে পাইপ করতে পারেন।

col -bp typescript | less -R

কিছু সিস্টেমে colকোনও ফাইলের নাম আর্গুমেন্ট গ্রহণ করবে না, পরিবর্তে এই সিনট্যাক্সটি ব্যবহার করুন:

col -bp <typescript | less -R

1
আমার সিস্টেমে, colকোনও ফাইল নাম গ্রহণ করবে না, তাই আমি col -bp < typescript যা করেছি তা পেয়েছি এবং পেয়েছি।
অ্যান্ড্রু

আমার জন্য কাজ করে না, কিছু আউটপুট স্ক্যাম্বল করে।
অ্যালেক্স

1
আমার সিস্টেমে less -Rনিজে col -bpআগে পাইপিংয়ের চেয়ে আরও ভাল আউটপুট সরবরাহ করে ।
ব্রায়ান হকিন্স

@ ব্রায়ান হকিন্স ব্যবহারের col -bp <typescript | less -Rফলে বর্ণযুক্ত কনসোলটি প্রদর্শিত হয় না। ব্যবহার less -R typescriptকরে বর্ণিত কনসোল প্রদর্শিত হবে!
ট্রেভর বয়ড স্মিথ

আপনি কেবল স্ক্রিপ্টটি ইন্টারেক্টিভভাবে দেখতে চাইলে এটি ভাল less
ট্রেভর বয়ড স্মিথ

18
cat typescript | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > typescript-processed

এখানে স্ট্রিং ইনপুটটির কিছু ব্যাখ্যা এখানে দেওয়া হয়েছে perl:

  • s/pattern//gসম্পূর্ণরূপে প্রতিস্থাপন করা gমানে ( বিকল্পের অর্থ প্রথম বিকল্পটি থামানোর পরিবর্তে পুরো কাজটি করা) ইনপুট স্ট্রিং

রেজেক্স প্যাটার্নটির কিছু ব্যাখ্যা এখানে দেওয়া হয়েছে:

  • \e বিশেষ "অব্যাহতি" নিয়ন্ত্রণ চরিত্রের সাথে মেলে (ASCII 0x1A)
  • (এবং )একটি গোষ্ঠীর শুরু এবং শেষ end
  • |মানে গ্রুপটি একটি এন ধরণের সাথে মেলে। এন নিদর্শন যেখানে
    • [^\[\]] অথবা
    • \[.*?[a-zA-Z] অথবা
    • \].*?\a
  • [^\[\]] মানে
    • নয় এমন অক্ষর একটি সেট যেখানে অক্ষর মেলে [এবং]
  • \[.*?[a-zA-Z] মানে
    • [তারপরে শুরু হওয়া একটি স্ট্রিং মেলে তারপরে .*?প্রথম আলফা অক্ষর না হওয়া পর্যন্ত অ-লোভী করুন
  • \].*?\a মানে
    • এর সাথে শুরু হওয়া একটি স্ট্রিং মেলে ]তারপরে একটি অ-লোভী করুন .*?যতক্ষণ না আপনি "সতর্কতা (বেল) চরিত্র" নামক বিশেষ নিয়ন্ত্রণের অক্ষরটিকে আঘাত করেন

1
আমি এখনও কীভাবে এটি নির্ধারণ করতে হবে, তবে এটি সত্যিই কাজ করে;)
এসিডামিন

@ এসডমিন - মূলত, এটি আউটপুটটিকে typescriptএমন একটি perlপ্রোগ্রামের প্রতিধ্বনি দেয় যা আউটপুট থেকে নির্দিষ্ট নিয়ন্ত্রণ অক্ষরগুলি সরিয়ে দেয়, তারপরে আউটপুটটিকে ইউনিক্স colকমান্ডে পাইপ দেয় , যার -bবিকল্পটি অনুলিপিটিতে কোনও "মুছুন" কী শিল্পকর্ম সরিয়ে দেয়। এরপরে এটি একটি পাঠ্য ফাইলে আউটপুটটি পাইপ করে।
পিটার নোর

এটি আমার জন্য টাইপস্ক্রিপ্টের প্রথম লাইনে আউটপুট স্ক্যাম্বল করে তবে এটি সেরা উত্তর।
অ্যালেক্স

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

কিংবদন্তি উত্তর!
জ্যাক 18

2

প্রচুর পরিমাণে scriptআউটপুট দেওয়ার জন্য, আমি বারে বারে একসাথে পার্ল স্ক্রিপ্ট হ্যাক করব। অন্যথায় একটি ভাল সম্পাদক দিয়ে হাত সম্পাদনা করুন।

scriptনির্দিষ্ট গুরুত্বপূর্ণ মুহুর্তে স্ক্রিনে প্রদর্শিত যা পুনরুত্পাদন করে এমনভাবে আউটপুট থেকে নিয়ন্ত্রণ অক্ষরগুলি অপসারণের একটি বিদ্যমান স্বয়ংক্রিয় পদ্ধতি হওয়ার সম্ভাবনা নেই (যেমন হোস্ট যখন কোনও ব্যবহারকারী ইনপুটটির প্রথম অক্ষরের জন্য অপেক্ষা করছিল )।

উদাহরণস্বরূপ, স্ক্রিনটি খালি থাকতে পারে ব্যতীত Andrew $, আপনি যদি rm /*বার বার বার টাইপ করে এবং চাপ দিয়ে থাকেন (প্রয়োজনের তুলনায় অনেক বেশি), এর শেষে পর্দায় কী প্রদর্শিত হবে তা শেলটি কী চলছিল তার উপর নির্ভর করে, আপনার বর্তমান sttyসেটিংস কী ( যা আপনি একটি সেশনের মাধ্যমে পার্টওয়ে পরিবর্তন করতে পারেন) এবং সম্ভবত কিছু অন্যান্য কারণও।

উপরেরগুলি ক্রমাগত ইনপুট এবং আউটপুট ক্যাপচারের যে কোনও স্বয়ংক্রিয় পদ্ধতিতে প্রযোজ্য। মূল বিকল্পটি হ'ল "স্ক্রিন শট" নেওয়া বা অধিবেশন চলাকালীন যথাযথ সময়ে স্ক্রিনটি কাটা এবং আটকানো (যা আমি ব্যবহারকারী গাইডগুলির জন্য করি, একটি দিনের লগের জন্য নোট ইত্যাদি)।



2

আমি ব্যবহার করেছি cat filenameযা নিয়ন্ত্রণের অক্ষরগুলি সরায় :-)


ইমো এটি একটি সুন্দর উত্তর, যেহেতু এটি সমস্ত নিয়ন্ত্রণ অক্ষরকে সত্যই মুছে ফেলে ।
নাথানেল ফারলে

ওএসএক্স-এ, বিড়াল রঙ নিয়ন্ত্রণের অক্ষরগুলি সরায় না ...
নিক

9
প্রকৃতপক্ষে বিড়াল নিয়ন্ত্রণ অক্ষরগুলিকে মোটেও সরিয়ে দেয় না, বরং এটি তাদের ভারব্যাটিমকে আউটপুট করে এবং টার্মিনালটি তখন তাদের ব্যাখ্যা করে। আপনার টাইপস্ক্রিপ্টটি যদি আপনার টার্মিনাল বাফারের সাথে সংক্ষিপ্ত হয় এবং আপনি টার্মিনাল থেকে অনুলিপি এবং অনুলিপি করতে পারেন তবে এটি আপনার পক্ষে কাজ করতে পারে। আপনার টাইপ স্ক্রিপ্ট যদিও বড় হয় তাই খুব ভাল না।
mc0e

1
একমত। এটি কিছুই সরিয়ে দেয় না। এটি শেলটি কেবল তাদের ব্যাখ্যা করার অনুমতি দেয়। তারা এখনও উপস্থিত।
কেনটগ্রভ

2

আপনি যদি আপনার কমান্ডগুলি রেকর্ড করেন তবে (উদাহরণস্বরূপ এগুলি পরে ব্যাশ স্ক্রিপ্টে রূপান্তর করা), তারপরে একটি যুক্তিসঙ্গত হ্যাক চালানো হয় script(1), তারপরে এটি চালান

bash -x

এর পরে grepআউটপুট ফাইল (সাধারণত "টাইপস্রিপ্ট") "+" দিয়ে শুরু হওয়া লাইনগুলি সন্ধান করে। নিয়মিত প্রকাশটি ^\+কৌশলটি করবে।


2

আপনি যদি কোনও ফাইলে আউটপুট লিখতে চান:

col -bp < typescript >>newfile

আপনি চাইলে ফাইলটি উইন্ডোজ ফর্ম্যাটে রূপান্তর করতে ইউনিক্সডোডস কমান্ডটি ব্যবহার করুন


1
উবুন্টু ১৪.০৪-এ, লাইনের শুরু এবং শেষের দিকে প্রচুর আবর্জনায় পড়ে। বেশ পঠনযোগ্য, তবে সত্যিই পরিষ্কার নয়।
mc0e

2

কল-বিপি ব্যাক স্পেসগুলি পছন্দসইভাবে প্রক্রিয়াকরণ করে (এএফআইকে)। তবে এটি রঙ পালানোর ক্রমগুলিকে ম্যাঙ্গাল করে। প্রথমে রঙের সিকোয়েন্সগুলি সরিয়ে ফেলা ভাল হতে পারে, তারপরে সম্ভব হলে ব্যাকস্পেসগুলি প্রক্রিয়া করুন।

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


1

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

দেউলটালের লিপি:

#!/usr/bin/perl
while (<>) {
    s/ \e[ #%()*+\-.\/]. |
       \r | # Remove extra carriage returns also
       (?:\e\[|\x9b) [ -?]* [@-~] | # CSI ... Cmd
       (?:\e\]|\x9d) .*? (?:\e\\|[\a\x9c]) | # OSC ... (ST|BEL)
       (?:\e[P^_]|[\x90\x9e\x9f]) .*? (?:\e\\|\x9c) | # (DCS|PM|APC) ... ST
       \e.|[\x80-\x9f] //xg;
       1 while s/[^\b][\b]//g;  # remove all non-backspace followed by backspace
    print;
}

নিয়ন্ত্রণের অক্ষরগুলি সরাতে:

./dewtalls-script.pl < output-from-script-that-needs-control-characters-removed

1

এই সমস্যা সমাধানের জন্য https://github.com/RadixSeven/tyypecript2txt লেখা হয়েছিল।

আমি সর্বশেষ আপডেট করেছি / ব্যবহার করেছি তার পরে 4 বছর হয়ে গেছে তবে আমি এমন কোনও অভিনব কাজ মনে করি না যা আজও কাজ করা উচিত নয়।


0

আমি এটি করার একটি ভাল উপায় খুঁজে পেয়েছি। আমার সিস্টেমে দীর্ঘ আউটপুট লাইনগুলি "^ এম" দিয়ে ছিটানো হয় (গাড়ি ফাঁকা হওয়ার পরে ফাঁকা জায়গা)। "^ এম" নাল অক্ষর "^ @" দিয়ে সুন্দরভাবে প্রতিস্থাপন করা যেতে পারে, যা আপনি ফাইলটি ক্যাট করার সময় মোটেও প্রদর্শন করে না।

আমি টাইমিংও ক্যাপচার করি, সুতরাং ফাইলটি পুরোপুরি রিপ্লে করার জন্য, আমি নীচের কমান্ডগুলি ব্যবহার করে কেবল "^ এম" পুরোপুরি সরিয়ে ফেলতে পারি না (কারণ স্ক্রিপ্টরেপ্লে বাইট গণনা করে):

tr '\r' '\0' | sed 's/ \x0//g'

আমি আমার স্ক্রিপ্ট কমান্ডটি এভাবে চালিত করি:

script -t -f session.log 2>timing

সুতরাং, আমি এরপরে যা করব তা হ'ল:

cat session.log | tr '\r' '\0' > typescript 
scriptreplay -t timing | sed 's/ \x0//g'

প্রথম সম্পাদনা (রিপ্লে করার আগে) ফাইলটিতে বাইটের সংখ্যা ধরে রাখে। দ্বিতীয় সম্পাদনা (রিপ্লেয়ের পরে) এলোমেলো জায়গায় সাদা স্থান থেকে মুক্তি পেয়েছে। (নোট করুন যে ডিফল্ট স্ক্রিপ্টরেপ্লে "টাইপসক্রিপ্ট" নামক ইনপুট ফাইলের সন্ধান করে, এ কারণেই আমি "টাইমিং" এর পরে এটি সরবরাহ করি নি))


-1

আউটপুটটিতে ডস 2 ইউনিক্সও কৌশলটি করবে


7
আপনি কীভাবে এটি কার্য সম্পাদন করতে ব্যবহার করবেন তা ব্যাখ্যা করতে পারেন?
বেন এন

-1

অন্য একটি সমাধান হ'ল ব্যবহার করা stringsযা কোনও ফাইল (বা স্ট্যান্ডার্ড ইনপুট থেকে) মুদ্রণযোগ্য অক্ষরগুলি মুদ্রণ করে:

strings -n 1 filename

-n 1বিকল্প সিকোয়েন্স এক সংরক্ষিত করা ন্যূনতম দৈর্ঘ্য সেট করে এবং এইভাবে নিশ্চিত এমনকি একক মুদ্রণযোগ্য অ মুদ্রণযোগ্য অক্ষর দ্বারা বেষ্টিত অক্ষর সংরক্ষিত হয় তোলে।

এই পদ্ধতির একটি সম্ভাব্য নেতিবাচকতা হ'ল stringsমুদ্রণযোগ্য অক্ষরের সংক্ষিপ্ত স্ট্রিংগুলির মধ্যে লাইন বিরতি যুক্ত করে। উদাহরণস্বরূপ বিষয়বস্তু সহ একটি ফাইল

Foo<SOMECONTROLCHAR>Bar

(যেখানে <SOMECONTROLCHAR>নিয়ন্ত্রণ চরিত্র বা অন্য কোনও মুদ্রণযোগ্য অক্ষর নেই) হিসাবে ফেরত দেওয়া হবে

Foo
Bar

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

যাইহোক, stringsপ্রশ্নটিতে উল্লিখিত ব্যাকস্পেসের মতো নিয়ন্ত্রণের অক্ষরগুলি মুছে ফেলার একটি ভাল কাজ রয়েছে।


stringsসমস্ত মুদ্রণযোগ্য অক্ষর মুছে ফেলা হয় না। এটি মুদ্রণযোগ্য অক্ষরগুলির ক্রমগুলি সনাক্ত করে এবং মুদ্রণ করে । এটি একই জিনিস নয়।
একটি সিভিএন

@ মাইকেলকার্জলিং, আপনি ঠিক বলেছেন, ডিফল্টরূপে stringsকেবল সর্বনিম্ন 4 দৈর্ঘ্যের সিক্যুয়েন্সগুলি মুদ্রণ করে আমি -n 1ন্যূনতম দৈর্ঘ্য নির্ধারণ করে বিকল্পটি যুক্ত করে আমার উত্তরটি সংশোধন করেছি this
justfortherec

উত্তরটি এখনও একই দাবি করে যা stringsসমস্ত মুদ্রণযোগ্য অক্ষর মুছে ফেলে, তাই এটি সম্পাদনার আগে যেমন ছিল ঠিক তেমনই ভুল। এটি স্পষ্টতই ভেঙে গেছে কারণ "কিছু রঙের কোড" (এবং সাধারণভাবে নিয়ন্ত্রণ কোডগুলি) প্রায়শই মুদ্রণযোগ্য এবং অন-প্রিন্টযোগ্য অক্ষর সমন্বিত থাকে। উদাহরণস্বরূপ, পাঠ্যের রঙ পরিবর্তন করার জন্য একটি নিয়ন্ত্রণ কোড অনুক্রমটি ESC[01;52mযেখানে ESCএকক পালানোর অক্ষর (বাইট মান 27) হতে পারে । stringsআপনার পরামর্শ অনুসারে ব্যবহার [01;52mকরলে আউটপুট চলে যাবে , যা অর্থহীন।
সিভিএন

মাইল পয়েন্ট, মাইকেলKjörling। বিশেষত রঙ কোড সহ উদাহরণটি খুব দুর্ভাগ্যজনক ছিল। আমার উত্তর উন্নত করতে সাহায্য করার জন্য ধন্যবাদ। সম্পাদনাগুলি কি আপনার উদ্বেগকে যথাযথভাবে সম্বোধন করে? stringsঅন্যান্য উত্তরগুলির মতো একই কাজ নাও করতে পারে তবে আইএমএইচও এটি প্রশ্নের মধ্যে বর্ণিত সমস্যা সমাধানের জন্য একটি বৈধ পন্থা।
justfortherec
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.