54

From time to time I need to do a simple task where I output basic HTML into the console. I'd like to have it minimally rendered, to make it easier to read at a glance. Is there a utility which can handle basic HTML rendering in the shell (think of Lynx-style rendering--but not an actual browser)?

For example, sometimes I'll put a watch on Apache's mod_status page:

watch -n 1 curl http://some-server/server-status

The output of the page is HTML with some minimal markup, which shows in the shell like:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html><head>
<title>Apache Status</title>
</head><body>
<h1>Apache Server Status for localhost</h1>

<dl><dt>Server Version: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.15 with Suhosin-Patch</dt>
<dt>Server Built: Jul 22 2014 14:35:25
</dt></dl><hr /><dl>
<dt>Current Time: Wednesday, 19-Nov-2014 15:21:40 UTC</dt>
<dt>Restart Time: Wednesday, 19-Nov-2014 15:13:02 UTC</dt>
<dt>Parent Server Generation: 1</dt>
<dt>Server uptime:  8 minutes 38 seconds</dt>
<dt>Total accesses: 549 - Total Traffic: 2.8 MB</dt>
<dt>CPU Usage: u35.77 s12.76 cu0 cs0 - 9.37% CPU load</dt>
<dt>1.06 requests/sec - 5.6 kB/second - 5.3 kB/request</dt>
<dt>1 requests currently being processed, 9 idle workers</dt>
</dl><pre>__W._______.....................................................
................................................................
................................................................
................................................................
</pre>
<p>Scoreboard Key:<br />
"<b><code>_</code></b>" Waiting for Connection,
"<b><code>S</code></b>" Starting up,
"<b><code>R</code></b>" Reading Request,<br />
"<b><code>W</code></b>" Sending Reply,
"<b><code>K</code></b>" Keepalive (read),
"<b><code>D</code></b>" DNS Lookup,<br />
"<b><code>C</code></b>" Closing connection,
"<b><code>L</code></b>" Logging,
"<b><code>G</code></b>" Gracefully finishing,<br />
"<b><code>I</code></b>" Idle cleanup of worker,
"<b><code>.</code></b>" Open slot with no current process</p>
<p />

When viewed in Lynx the same HTML is rendered as: Apache Status (p1 of 2) Apache Server Status for localhost

   Server Version: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.15 with Suhosin-Patch
   Server Built: Jul 22 2014 14:35:25
     ________________________________________________________________________________________________________

   Current Time: Wednesday, 19-Nov-2014 15:23:50 UTC
   Restart Time: Wednesday, 19-Nov-2014 15:13:02 UTC
   Parent Server Generation: 1
   Server uptime: 10 minutes 48 seconds
   Total accesses: 606 - Total Traffic: 3.1 MB
   CPU Usage: u37.48 s13.6 cu0 cs0 - 7.88% CPU load
   .935 requests/sec - 5088 B/second - 5.3 kB/request
   2 requests currently being processed, 9 idle workers

_C_______W_.....................................................
................................................................
................................................................
................................................................

   Scoreboard Key:
   "_" Waiting for Connection, "S" Starting up, "R" Reading Request,
   "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
   "C" Closing connection, "L" Logging, "G" Gracefully finishing,
   "I" Idle cleanup of worker, "." Open slot with no current process
2
  • 2
    Not bash exactly, but check out Xiki, it does that and more
    – aarosil
    Nov 20, 2014 at 17:15
  • xiki looks awesome.
    – MountainX
    Oct 1, 2018 at 4:43

5 Answers 5

65

lynx has a "dump" mode, which you can use with watch:

$ watch lynx https://www.google.com -dump

screenshot of output

From man lynx:

   -dump  dumps  the  formatted  output  of  the default document or those
          specified on  the  command  line  to  standard  output.   Unlike
          interactive mode, all documents are processed.  This can be used
          in the following way:

          lynx -dump http://www.subir.com/lynx.html

          Files specified on the command line are  formatted  as  HTML  if
          their  names  end  with one of the standard web suffixes such as
          “.htm” or “.html”.  Use the -force_html option to  format  files
          whose names do not follow this convention.

This Ask Ubuntu question has many more options.

2
  • 2
    lynx is great. it's also a really useful tool when your connection is very bad and you need to go check a site for something - no images, scripts or css makes for a fast page load
    – jammypeach
    Nov 20, 2014 at 17:58
  • 2
    in case someone wants to pipe the curl output. curl www.google.de | lynx -stdin sauce: unix.stackexchange.com/a/271946/140177
    – ssi-anik
    Jan 18 at 16:24
16

w3m is another program that has a -dump option.

It is the backend Emacs' most popular web browser.

0
11

There are at least two programs named html2text (1) (2) which do this job.

1
  • Indeed but -- if available -- the output of w3m is much more beautiful esp. for tables.
    – Suuuehgi
    Nov 20, 2017 at 11:48
7

elinks has -dump mode too

elinks -dump https://www.google.com
1
  • 1
    See also links on which elinks is based. Same command works...
    – user44370
    Nov 20, 2014 at 6:51
2

For a different kind of approach, pandoc can convert between many formats, including from html to plain text, and you can give it a URL directly to convert html to something else,

pandoc --to plain https://example.net

Or if you want a little formatting, you can use markdown output:

pandoc --to markdown https://example.net

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.