নির্দিষ্ট প্রস্থ সহ ম্যান পৃষ্ঠাগুলি মুদ্রণ করুন


11

উদাহরণ কমান্ড সহ

man apropos > outputfile

একটি পাঠ্য ফাইল তৈরি করা হয় যা এর ফর্ম্যাট manপৃষ্ঠা রয়েছে apropos( man aproposসরাসরি স্ক্রিনে মুদ্রিত যেমন কিছু সাহসী অক্ষরের সাথে কিছু সামান্য পার্থক্য সহ )।

তবে আমি নিজে থেকে উত্পন্ন আউটপুট ফাইলের সর্বাধিক লাইন প্রস্থটি সেট করতে চাই, যাতে সমস্ত অনুচ্ছেদগুলি সেই প্রস্থে ন্যায়সঙ্গত হয়।

manপৃষ্ঠাগুলি এর মাধ্যমে তৈরি করা হয় groff: উদাহরণস্বরূপ, আমি .ll 50মূল .gz manউত্স পাঠ্য ফাইলটির একটি অনুচ্ছেদের সামনে রাখার চেষ্টা করেছি , তবে বেশ কয়েকটি manপৃষ্ঠায় কাজ করার প্রয়োজন হলে এটি ক্ষুদ্র । তদুপরি সমস্ত অক্ষর স্বীকৃত নয়:

apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169

সুতরাং, আমি আশ্চর্য হই যে আরও সহজবোধ্য পদ্ধতি উপস্থিত থাকলে কি না। একটি তৈরির সময় সর্বাধিক লাইনের প্রস্থ কীভাবে সংশোধন করবেন outputfile? কিছু নির্দিষ্ট আদেশ আছে?


সম্পাদনা করুন :

(নিম্নলিখিত সমস্ত বিবেচনাগুলি উবুন্টু 18.04 সম্পর্কে: আমি পূর্ববর্তী সংস্করণগুলিতে আর পরীক্ষা করতে পারি না, উপরের প্রশ্নের 14.04 অন্তর্ভুক্ত)

এক-লাইন অস্থায়ী সমাধান হিসাবে, যদি MANWIDTHইতিমধ্যে একটি কাস্টম মান দিয়ে রফতানি না করা হয় তবে এর মধ্যে কোনও পার্থক্য নেই

$ MANWIDTH=60 man apropos > outputfile

এবং

$ COLUMNS=60 man apropos > outputfile

প্রথমটি ব্যবহার করে MANWIDTHনীতিগতভাবে আরও ভাল।


সম্পাদনা 2 (প্রশ্নের সাথে কঠোরভাবে সম্পর্কিত নয়):

পরিবর্তে স্থায়ী প্রস্থের যে কোনও মানচিত্রটি মুদ্রণের জন্য প্রয়োগ করতে হলে পরিবর্তনকের পছন্দসই মানটি রফতানি করা প্রয়োজন । সঙ্গে:

$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile

man aproposযেকোন টার্মিনাল উইন্ডোর আকার পরিবর্তন না করে একই প্রস্থে মুদ্রিত হবে। পরিবর্তে,

$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile

টার্মিনাল উইন্ডোটি exportএবং এর মধ্যে পুনরায় আকার দেওয়া না হলে কেবল আগের মত একই ফলাফল সরবরাহ করবে man <page> > outputfile


আমি আপনার input codeত্রুটিগুলি 195 168 ইউটিএফ -8-এ হতে পারে পুনরুত্পাদন করতে পারি না । ম্যান পেজটি কি ইংরেজিতে? আপনার মানুষ বাস্তবায়ন কি? আপনার লোকেল কি?
স্টাফেন চেজেলাস

সিস্টেমটি উবুন্টু 14.04 (সংস্করণটি man man2.6.7.1 এর) is ম্যান পৃষ্ঠাটি ইটালিয়ান ভাষায় এবং এটি ইউটিএফ -8। লোকাল বলতে কী বুঝ?
বোপর্ক

এর আউটপুট কি locale? এবং locale charmap?
স্টাফেন চেজেলাস

localeআউটপুট: LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" locale charmapআউটপুট:UTF-8
বোপর্ক

1
হ্যাঁ টার্মিনাল কার্যকরী নয় থেকে lessকারণ TERMসেট করা নেই। মানে env -i LANG=it_IT.UTF-8 man apropos > output(বা | head)।
স্টাফেন চেজেলাস

উত্তর:


19

MANWIDTHপরিবেশ পরিবর্তনশীল ব্যবহার করুন :

MANWIDTH=60 man apropos > apropos.txt

২.7.৪ মানুষের জন্য ম্যানপেজটি বলেছেন:

যদি AN MANWIDTH সেট করা থাকে তবে এর মানটি লাইন দৈর্ঘ্যের হিসাবে ব্যবহৃত হয় যার জন্য ম্যানুয়াল পৃষ্ঠাগুলি ফর্ম্যাট করা উচিত। যদি এটি সেট না করা হয়, ম্যানুয়াল পৃষ্ঠাগুলি বর্তমান টার্মিনালের সাথে উপযুক্ত একটি লাইন দৈর্ঘ্যের সাথে ফর্ম্যাট করা হবে (উপলব্ধ হলে oc COLUMNS এর মান ব্যবহার করে, একটি আইওএসটিএল (2) পাওয়া যাবে বা উপলব্ধ না থাকলে 80 টি অক্ষরে ফিরে যাবে)।

এটি, এটি উভয় COLUMNSএবং ioctlমানকে ওভাররাইড করে । আমি পরিবর্তনের উপর নির্ভর করতে পছন্দ করি না COLUMNS(যদিও এটি এখানে কাজ করে) কারণ উইন্ডোর আকার প্রতিবার পরিবর্তিত হওয়ার সাথে সাথে এর মান পরিবর্তনশীলভাবে আপডেট হয়।

MANWIDTHপরিবর্তে ব্যবহার করা COLUMNSআপনাকে export MANWIDTH=60শেল স্টার্টআপ ফাইলের মতো একটি লাইন যুক্ত করে পরিবর্তনকে স্থায়ী করতে দেয় ।


চমৎকার কাজ. আমি কোনওভাবেই COLUMNS পরিবর্তন করতে চাইনি, এবং MHWIDTH RHEL5 এ একটি ট্রিট কাজ করে। চিয়ার্স।
ফিলিপ আলভারেজ

1
পাঠকদের জন্য একটি নোট: আপনার এটিতে export MANWIDTH=60সেট করা থাকলে আপনার প্রয়োজন হতে পারে ~/.bashrcস্ট্যাকওভারফ্লো . com/a/30173376/82216 দেখুন । এছাড়াও, আর্ক উইকিতে এখানেman প্রস্তাবিত হিসাবে আপনার টার্মিনালের প্রস্থের উপর নির্ভর করে মনভিডথ সেট করতে কোনও ফাংশনে মোড়কে বিবেচনা করুন।
সাম্পাব্লুকুপার

@ মার্সেল এম আপনার খুব সুনির্দিষ্ট উত্তরের জন্য আপনাকে ধন্যবাদ। আপনি কি দয়া করে প্রশ্নের আপডেটটি পড়তে পারেন এবং মূল উত্তর সম্পর্কে অন্তর্ভুক্ত করতে আপনার উত্তরটি সম্পাদনা করতে পারেন export MANWIDTH=60?
বোপার্ক

@ বাউপার্ক আমি উত্তর ছাড়াই লিখেছিলাম exportকারণ আপনি একটি অস্থায়ী সমাধান সম্পর্কে জিজ্ঞাসা করেছিলেন: "কীভাবে আউটপুটফিল তৈরির সময় সর্বাধিক লাইনের প্রস্থ পরিবর্তন করতে হবে ? " (জোর দেওয়া আমার)। এমনকি আপনার সম্পাদনাটি যে প্রশ্নটিতে যুক্ত হয় না তা প্রত্যাহার করতেও পারেন। (একটি মন্তব্য আরও উপযুক্ত।)
মার্সেল এম

@ মার্সেলএম আসলে আপনি ঠিক বলেছেন। আমি সেই অনুসারে প্রশ্নটি সম্পাদনা করেছি। আমি exportবিবৃতিগুলির সাথে একটি দ্বিতীয় সম্পাদনা লিখেছিলাম কারণ একটি মন্তব্যে এটি প্রায় অপঠনযোগ্য হবে (নতুন লাইন তৈরি করা সম্ভব হচ্ছে না)।
বোপার্ক

10

COLUMNSপরিবেশ পরিবর্তনশীল সেট করার চেষ্টা করুন । সঙ্গে আমার জন্য কাজ করে manথেকে mandbসঙ্গে ডেবিয়ান উপর 2.7.0.2 groff1.22.3।

$ COLUMNS=60 man apropos | head
APROPOS(1)          Manual pager utils          APROPOS(1)



NAME
       apropos - search the manual page names and descrip
       tions

SYNOPSIS
       apropos [-dalv?V] [-e|-w|-r]  [-s  list]  [-m  sys

$ COLUMNS=70 man apropos | head
APROPOS(1)               Manual pager utils               APROPOS(1)



NAME
       apropos - search the manual page names and descriptions

SYNOPSIS
       apropos  [-dalv?V] [-e|-w|-r] [-s list] [-m system[,...]] [-M
       path] [-L locale] [-C file] keyword ...

উবুন্টু 14.04-এ সংস্করণ সহ, আমার এটি লিখতে হবে:

COLUMNS=60 < /dev/null man apropos | head

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

আপনিও চেষ্টা করতে পারেন:

s=$(stty -g); stty cols 60; man apropos | head; stty "$s"

zshআপনার সাথে কোনটি সংক্ষিপ্ত করতে পারবেন:

STTY='cols 60' man apropos | head

আপনি groffহাতের মাধ্যমে অনুরোধ করে এটি করতে পারেন :

gzip -dcf "$(man -w apropos)" |
  groff -ekpstR -mtty-char -mandoc -Tutf8 -rLL=60n |
  col -bpx

তোমার ইনপুট কোড সহ খুঁজে পাচ্ছি না চরিত্র ত্রুটি ছিল কারণ আপনার ব্যবহৃত -Tasciiপরিবর্তে -Tutf8এবং ব্যবহার করা হয়নি -kসঙ্গে প্রক্রিয়ার প্রাক ফাইলগুলিতে preconv


আমি একই কমান্ডটি চেষ্টা করেছি: COLUMNS=60 man apropos | headতবে দুর্ভাগ্যক্রমে আউটপুট প্রস্থটি সমস্ত পর্দার প্রস্থ। আমি পরিবর্তনশীল COLUMNSঅন্য কোথাও বা অন্যভাবে সেট করতে পারি ?
বো

2
ব্যবহার করে দেখুন COLUMNS=60 < /dev/null man apropos | head। উবুন্টু 14.04-তে দেখে মনে হচ্ছে, স্টিডিন COLUMNSযদি টার্মিনাল হয় (এবং টার্মিনাল ডিভাইস থেকে প্রস্থ পায়) এটি বিশ্বাস করে না ।
স্টাফেন চেজেলাস

আপনার ধারণা মত এটি হতে পারে। এবং এখন এটি কাজ করে, আপনাকে ধন্যবাদ!
বোপার্ক

4

আপনি fmtকমান্ডটি ব্যবহার করতে পারেন , যা আমি যতদূর জানি যে কোনও লিনাক্স বিতরণে উপস্থিত।

man apropos | fmt -w 70 

70 টি অক্ষরে লাইনগুলি মোড়ানো হবে।


1
হ্যাঁ আমার কাছে এটি আছে, আপনাকে ধন্যবাদ, এটি কাজ করে এবং এটি বেশ কার্যকর, তবে আমার একটি যুক্তিসঙ্গত পাঠ্য প্রয়োজন এবং এটি কেবল পরিবর্তে লাইনগুলিকে গুটিয়ে রাখে।
বো

দুঃখিত, আমি অবশ্যই এই অংশটি মিস করেছি।
dr_

2

তুমি ব্যবহার করতে পার fold

man cp | fold -w 20

প্রতি 20 টি অক্ষর (!) পরে ভাঁজ হবে। মনে রাখবেন যে এটি দুটিতে শব্দ কেটে দেবে কারণ একমাত্র বিকল্পটি "প্রতি 20 টি অক্ষরকে ভাঁজ করুন"

এটি যত্ন নেওয়ার পরে, আপনি sedনিম্নলিখিত হিসাবে ব্যবহার করতে পারেন (গতিশীল লাইন দৈর্ঘ্য সহ)

man cp | sed 's/.\{20\} /&\n/g'

একটি স্থান (অর্থাত্ নতুন শব্দ) এর পরে 20 এলোমেলো অক্ষরের পরে একটি নতুন লাইন যুক্ত করবে। সুতরাং লাইনগুলি 20 টি অক্ষরের চেয়ে দীর্ঘ হতে পারে (ম্যাচটি 20 টি অক্ষর এবং তারপরে একটি স্পেস তাই 26-অক্ষরের শব্দের ফলে 26-অক্ষরের লাইন তৈরি হয়)

sedকমান্ডের শেষ স্থানটি বাদ দেওয়ার জন্য :

sed 's/\(.\{20\}\) /\1\n/g'

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