Redirecting man page output to file results in double letters in words
Asked Answered
D

3

10

I redirected the output of man djpeg into a text file so that I can reference it as I learn to use it. My instruction was man djpeg > textfile.txt. However, the output looks something like this:

LS(1)                     BSD General Commands Manual                    LS(1)

NNAAMMEE
     llss -- list directory contents

SSYYNNOOPPSSIISS
     llss [--AABBCCFFGGHHLLOOPPRRSSTTUUWW@@aabbccddeeffgghhiikkllmmnnooppqqrrssttuuwwxx11] [_f_i_l_e _._._.]

DDEESSCCRRIIPPTTIIOONN
     For each operand that names a _f_i_l_e of a type other than directory, llss
     displays its name as well as any requested, associated information.  For
     each operand that names a _f_i_l_e of type directory, llss displays the names
     of files contained within that directory, as well as any requested, asso-
     ciated information.

     If no operands are given, the contents of the current directory are dis-
     played.  If more than one operand is given, non-directory operands are
     displayed first; directory and non-directory operands are sorted sepa-
     rately and in lexicographical order.

     The following options are available:

     --@@      Display extended attribute keys and sizes in long (--ll) output.

     --11      (The numeric digit ``one''.)  Force output to be one entry per
             line.  This is the default when output is not to a terminal.

     --AA      List all entries except for _. and _._..  Always set for the super-
             user.

     --aa      Include directory entries whose names begin with a dot (_.).

     --BB      Force printing of non-printable characters (as defined by
             ctype(3) and current locale settings) in file names as \_x_x_x,
             where _x_x_x is the numeric value of the character in octal.

     --bb      As --BB, but use C escape codes whenever possible.

[...continues]

There's more but you get the point. Why is it repeating some of the characters? Also, why doesn't it repeat all of them if there's some function executing twice or a cache flushing incorrectly?

Dragonfly answered 29/10, 2014 at 15:34 Comment(1)
Most of the man pages can be found online, for a better reading: linux.die.net/man – Disengagement
P
6

The 'man' program was originally designed to print its output on teletypes, and uses over-printing to produce bold character and underlining effects. What you're actually seeing is the effect of the file containing strings of the form X^HX, where the ^H is a backspace character. You also have strings like _^HX, for underlining (hence the _f_i_l_e).

These can be stripped easily using a text editor like vi, which will display the backspaces.

:%s/_^H//g

will remove the underlines, and

:%s/.^H.//g

the boldings (the ^H in the above is ctrl-H. You will have to use ctrl-V ctrl-H to enter these into vi.

Purulent answered 29/10, 2014 at 15:57 Comment(0)
K
18

A cleaner approach is to pipe the output to "col -b" first:

man djpeg | col -b > textfile.txt

Source: https://unix.stackexchange.com/a/15866

Knitting answered 1/5, 2017 at 20:48 Comment(2)
This is a neater one which fits my situation better than the vim solution. – Endive
This solves the underlying problem and should be the accepted answer – Respite
P
6

The 'man' program was originally designed to print its output on teletypes, and uses over-printing to produce bold character and underlining effects. What you're actually seeing is the effect of the file containing strings of the form X^HX, where the ^H is a backspace character. You also have strings like _^HX, for underlining (hence the _f_i_l_e).

These can be stripped easily using a text editor like vi, which will display the backspaces.

:%s/_^H//g

will remove the underlines, and

:%s/.^H.//g

the boldings (the ^H in the above is ctrl-H. You will have to use ctrl-V ctrl-H to enter these into vi.

Purulent answered 29/10, 2014 at 15:57 Comment(0)
I
0

You could simply redirect STDIN to any (non) gui editor (which supports stdin input 😜) ... no problems with character duplication

For example (my top 5 πŸ˜„):

man curl | subl -
man curl | vi -
man curl | vim -
man curl | nano -
man curl | code -
...

P.S. it is not only man use-case - any info could be redirected this way

Inflammable answered 25/1, 2023 at 17:48 Comment(0)

© 2022 - 2024 β€” McMap. All rights reserved.