【问题标题】:formatting from html to output [duplicate]从html格式化到输出[重复]
【发布时间】:2020-09-25 19:52:40
【问题描述】:

我是 bash 脚本的新手,我有 html 文件,我想读取该文件并在终端中显示格式。

我的 Html 文件代码

<table>
<tr><th >Country Name</th><th >City1</th><th >City2</th><th>City3</th></tr>
<tr><td>CHINA</td><td>500</td><td>700</td><td>1200</td></tr>
<tr><td>USA</td><td>400</td><td>600</td><td>1000</td></tr>
</table>

如何格式化终端输出,我的意思是colum1和column2之间的空格?

【问题讨论】:

  • 不要在图片中放文字。
  • 这不是文本,我只是取html文件和终端的prtscr,这样我就可以轻松解释我的问题。
  • 没有“awk bash”这样的东西。 awk 是一种编程语言。 Bash 是不同的。调用 awk(或反之)的 bash 脚本是一个脚本,它具有用不同语言编写的不同部分,由完全独立的解释器运行。
  • ...无论如何,如果您想从 XML 或 HTML 中提取内容,可以使用专门的工具。我强烈建议使用利用 XPath、XSLT 和其他标准化查询语言的东西;我最喜欢的命令行工具(它在许多模式下生成 XSLT)是xmlstarlet
  • 如果您要在 awk 中使用 printf,请将其用于 both 值——您可以让它将字符串填充到特定的列长度。

标签: linux bash shell terminal


【解决方案1】:

选项 1:使用 column 格式化现有代码的输出

使用列工具为您格式化代码

$ cat test.sh 
#!/bin/bash

pre="<tr><td>"
post="<\/td><\/tr>"
mid="<\/td><td>"

cat myfile.html | grep "<td>" | sed -e "s/^$pre//g;s/$post$//g;s/$mid/ /g" | awk '{ sum=($2+$3+$4); printf $1  " %.0f \n" ,sum}'

$ cat myfile.html 
<table>
<tr><th >Country Name</th><th >City1</th><th >City2</th><th>City3</th></tr>
<tr><td>CHINA</td><td>500</td><td>700</td><td>1200</td></tr>
<tr><td>USA</td><td>400</td><td>600</td><td>1000</td></tr>
</table>

$ ./test.sh | column -t
CHINA  2400
USA    2000

选项 2:更新现有代码对 printf 的使用

如果我们知道可能的最长国家名称长度,我们可以告诉printf 填充它。 更改现有答案的 awk 部分(在这种情况下,告诉它填充到 8 个空格):

grep "<td>" myfile.html \
  | sed -e "s/^$pre//g;s/$post$//g;s/$mid/ /g" \
  | awk '{ sum=($2+$3+$4); printf "%-08s %.0f \n", $1, sum}'

...我们得到输出:

CHINA    2400
USA      2000

【讨论】:

  • 这已经包含在How can I align the columns of tables in bash?中,它是重复列表的成员。 (如那里所述,column 工具并非在 bash 所在的任何地方都可用,因此printf 通常更好)。
  • @CharlesDuffy 在这种情况下我应该删除我的答案吗?我刚来这里两天,不知道所有的“规则”。
  • 耸耸肩。如果是我,我会标记它社区维基,但这是一个严格的自愿行为 - 我不能告诉你这样做(但不承认从答案中获得任何声誉,就像社区维基标志所做的那样,倾向于使不符合规则的答案更容易接受)。
  • @CharlesDuffy 完成,在这种情况下,因为我相信这个答案可以改进,以使用 printf | 回答这个特定场景。 awk 工具。如果有人想为此付出更多努力:)
  • 嘿。很高兴演示使用 awk 的 printf 进行对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2016-04-24
  • 2018-05-02
  • 2014-12-12
  • 2017-02-20
  • 2021-02-21
相关资源
最近更新 更多