How can I 'cat' a man page like I would 'cat' a file to get just a dump of the contents?
7 Answers
To get an ASCII man page file, without the annoying backspace/underscore attempts at underlining, and weird sequences to do bolding:
man ksh | col -b > ksh.txt
-
3Hi, why does man piped output contains duplicate characters? and How did col -b removes its? Thanks in advance. Commented Apr 20, 2017 at 13:04
-
6@saurabheights - man attempts to do underlines and bold text and maybe some other things with backspaces, duplicate characters, escape sequenc es, etc etc. Tricks that might work if you print the man output on a dot matrix or other printer, or show it as text on a terminal. I haven't read col source, but it probably just examines stdin byte by byte and doesn't pass backspaces, etc to stdout. col's man page reads like someone wrote it specifically to filter man output.– user732Commented Apr 21, 2017 at 13:00
-
1ok, that makes sense. Such characters(hidden) could cause the duplicate characters. Thank you Bruce. Commented Apr 21, 2017 at 13:02
-
You really really deserve mode upvotes. Does "col" for column?– WizardCommented Aug 18, 2018 at 4:30
-
7As another answer below mentioned, add
x
tocol
to remove the space/tab mix in the output:man ksh | col -bx > ksh.txt
Commented Apr 4, 2020 at 20:39
First of all, the man files are usually just gziped text files stored somewhere in your file system. Since your mileage will vary finding them and you probably wanted the processed and formatted version that man gives you instead of the source, you can just dump them with the man
tool. By looking at man man
, I see that you can change the program used to view man pages with the -P
flag like this:
man -P cat command_name
It's also worth noting that man
automatically detects when you pipe its output instead of viewing it on the screen, so if you are going to process it with something else you can skip straight to that step like so:
man command_name | grep search_string
or to dump TO a file:
man command_name > formatted_man_page.txt
-
4using -P doesn't make the output file neatly readable. It's scribbled with all the ctrl-H characters. I used to do man cmd >! man.cmd and open the man.cmd and do '%s/^H.//g' to remove the annoying control characters for representing bolds and italics. But this still has some problem when there are other special characters. I'm still looking for a good method to avoid manual editing to the output.– Chan KimCommented Apr 25, 2016 at 8:34
-
@ChanKim You're doing something wrong or have some non-standard configuration getting in your way because both of the methods here do in fact produce clean output formatted in plain text with no extra control characters. Are you sure you don't have
man
aliased to something or flags forced on in your shell that are separating your from the normal function ofman
?– CalebCommented Apr 25, 2016 at 8:39 -
1@Caleb, I confirm OP's problem. CentOS release 6.7 (Final), /usr/bin/man gcc >j, edit 'j', all of the ctrl-H's are in there. Best answer I've found is at commandlinefu.com/commands/view/2417/… Commented May 19, 2016 at 15:42
-
2
man command_name > formatted_man_page.txt
will cause some word duplicate. Commented Aug 21, 2018 at 8:20 -
man {whatever} | col -b > {whatever}.txt
will remove the backspaces Commented Jun 1, 2022 at 22:18
Man pages are usually troff
pre-processed files, and you can get to the plain text with,
groff -t -e -mandoc -Tascii manpage.1 | col -bx > manpage.txt
groff
is a wrapper for troff
.
You might need to use gzip to uncompress the man page files first, and you'll still have plenty of formatting information in the output.
-
6+1 for talking about groff/troff and the formatting of man pages– lgeorgetCommented Jun 25, 2014 at 11:26
I do this all the time. This command line makes me happy:
man man | col -bx > man.txt
col -b removes backspaces.
col -bx also replaces tabs with spaces which is my strong preference.
If I want the text to be formatted to a width of my preference while reading, then I change the command to this:
MANWIDTH=10000 man man | col -bx > man.txt
Just use the man
command - you can pipe the output into other things just as you can with cat
for a file.
If you just want to cat
a manpage, you can simply pipe it to cat
:
man ls | cat
If you want to dump its content to a file:
man ls > ls_manpage_dump.txt
A possible helper might look as follows:
#!/usr/bin/env sh
{
# We can safely export the following variables unless we source this file
export TERM=dumb
export MANPAGER=cat
export MANWIDTH=100
# Here is how it works:
#
# 1. 'col -b' removes backspaces, 'col -x' replaces tabs with spaces
# 2. Drop lines from the top up to USAGE word
# 3. Drop two lines from the bottom
man "$1" \
| col -bx \
| grep -A 100 USAGE \
| sed '$d' | sed '$d'
} > "$2"
Usage:
$ mandump ksh ksh.txt