サンプルコマンドの使用
man apropos > outputfile
書式設定されたman
ページを含むテキストファイルを作成しますapropos
(man apropos
太字などの画面に直接印刷するのとは若干の違いがあります)。
しかし、生成された出力ファイルの最大行幅を手動で設定して、すべての段落がその幅に一致するようにしたいと思います。
man
ページは次のように生成されます。たとえば、元のソーステキストファイルの1つの段落を前に配置しようとしましたが、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
?特別注文がありますか?
編集する:
(以下の注意事項はすべてUbuntu 18.04に関するものです。上記の質問の14.04を含む以前のバージョンではテストできません。)
1行の一時的なソリューションの場合、カスタムMANWIDTH
値としてエクスポートされていない場合、2つの間に違いはありません。
$ 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
。
答え1
MANWIDTH
環境変数を使用してください。
MANWIDTH=60 man apropos > apropos.txt
man 2.7.4のマンページには次のように記載されています。
$ MANWIDTHが設定されている場合、その値はマニュアルページをフォーマットする必要がある行の長さとして使用されます。設定しないと、マニュアルページは現在の端末に適した行長にフォーマットされます(使用可能な場合は$ COLUMNS、ioctl(2)値を使用し、両方が使用できない場合は80文字に置き換えます)。
つまり、値をオーバーライドしますCOLUMNS
。ioctl
ウィンドウサイズが変更されるたびにその値が動的に更新されるため、変更に依存したくありませんCOLUMNS
(ここでは機能しますが)。
上書きを使用すると、シェルMANWIDTH
起動ファイルに行を追加してCOLUMNS
変更を永続的に適用することもできます。export MANWIDTH=60
答え2
COLUMNS
環境変数を設定してみてください。 Debian 1.22.3では、バージョン2.7.0.2を使用できますman
。mandb
groff
$ 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 ...
Ubuntu 14.04バージョンの場合は、次のように書く必要があります。
COLUMNS=60 < /dev/null man apropos | head
ここでstdinが端末の場合、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
オプションgroff
は次のとおりです。
# Native groff Options
-e eqn (equations)
-k preconv (encoding for groff)
-p pic (pictures)
-s soelim (.so requests - source file)
-t tbl (format tables)
-R refer (bibliography)
# Transparent Options
-mtty-char
Overrides the definition of standard troff characters and
some groff characters for TTY devices. The optical appearance
is intentionally inferior compared to that of normal TTY
formatting to allow processing with critical equipment.
-mandoc
Use this file in case you don't know whether the man macros
or the mdoc package should be used. Multiple man pages (in
either format) can be handled.
-R utf8 (output-encoding)
-r LL=60n (Number of LL registers)
あなたの入力コードに文字が見つかりませんを使用する-Tascii
代わりにを使用してファイルを前処理しているため、エラーが発生します。-Tutf8
-k
preconv
答え3
fmt
私が知っている限り、すべてのLinuxディストリビューションに存在するこのコマンドを使用できます。
man apropos | fmt -w 70
70文字で終わります。
答え4
あなたはそれを使用することができます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'