在bash中以表格形式缩进字符串输出

时间:2016-05-17 15:31:00

标签: string bash format

我试图以某种方式输出几个字符串,因此第二列保持缩进,即使例如终端太小而必须继续另一行。 现在我的代码看起来像这样:

echo " --show=[name]     Show all packages, including"\
                         "their version."
echo "                   Date format: dd.mm.yy"
echo " --upgrade [pkg]   Upgrade packages inside"\
                         "current instance."

     #Size of terminal with output
     +--------------------------------------------+
     | --show=[name]    Show all packages, includi|
     |ng their version.                           |
     |                  Date format: dd.mm.yy     |
     | --upgrade [pkg]  Upgrade packages inside cu|
     |rrent instance.                             |
     +--------------------------------------------+

它剪切文本并将其抛出到下一行的开头而没有任何缩进。我尝试使用制表符,但没有改变任何内容。

我正在尝试将输出调整为任何终端大小,因此它看起来像......

     +--------------------------------------------+
     | --show=[name]    Show all packages,        |
     |                  including their version.  |
     |                  Date format: dd.mm.yy     |
     | --upgrade [pkg]  Upgrade packages inside   |
     |                  current instance.         |
     +--------------------------------------------+

2 个答案:

答案 0 :(得分:0)

执行此操作的传统方法是tbl文本格式系统使用的troff实用程序,但是现在我发现使用带有文本模式浏览器的HTML作为渲染器更容易。但是,所有渲染器都有自己的怪癖,所以你可能需要做一些解决方法。

w3m在渲染方面表现相当不错,但它似乎无法正确处理col元素并且它无法处理CSS,这意味着您需要指定第一行的td元素上的列宽和每个td元素上的垂直对齐。这有点单调乏味,所以我在下面使用变量插值来做。

请注意,width属性的值位于 pixels ; w3m默认为每个字符8个像素,因此要将列宽15个字符,您需要指定width=120

有了这个介绍,这是你的表:

C1="<tr><td width=120 valign=top>" C="<td valign=top>"
w3m -dump -T text/html -cols 45 <<EOT
<table>
${C1}--show=[name]
  ${C}Show all packages, including their version.<br />
      Date format: dd.mm.yy
${C1}--upgrade [pkg]
  ${C}Upgrade packages inside current instance.
</table>
EOT

和输出

--show=[name]     Show all packages,
                  including their version.
                  Date format: dd.mm.yy
--upgrade [pkg]   Upgrade packages inside
                  current instance.

-cols 45更改为-cols 80

--show=[name]     Show all packages, including their version.
                  Date format: dd.mm.yy
--upgrade [pkg]   Upgrade packages inside current instance.

只是为了好玩,通过将<table>更改为<table border>来添加边框:

┌─────────────────┬────────────────────────┐
│--show=[name]    │Show all packages,      │
│                 │including their version.│
│                 │Date format: dd.mm.yy   │
├─────────────────┼────────────────────────┤
│--upgrade [pkg]  │Upgrade packages inside │
│                 │current instance.       │
└─────────────────┴────────────────────────┘

您还可以尝试使用任何其他文字模式浏览器,例如lynxelinks

答案 1 :(得分:-1)

坏消息...... {b} shell的echo函数有时会吞下空白(特别是当你将输入分成几行时)。您可以尝试使用强制正确处理转义字符的-e选项(您的`\&#39;),或者在我看来,更好地以受控方式拆分行,以便您的代码如下所示:< / p>

echo " --show=[name]     Show all packages, including"
echo "                   their version."
echo "                   Date format: dd.mm.yy"
echo " --upgrade [pkg]   Upgrade packages inside"
echo "                   current instance."

这就是我通常所做的事情,对我来说非常适合。