首页 > 解决方案 > 如何从 grep -A 输出中标记第二行

问题描述

我正在尝试过滤 html 文件以仅从文件中获取特定值。该文件是来自 metatrader 的 html 报告,我想只过滤 html 中的输出值表。

这是 html 文件的示例(report2.html)

<tr align="right">
   <td nowrap colspan="3">Net profit:</td>
   <td nowrap><b>17.74</b></td>
   <td nowrap colspan="3">Balance Drawdown Absolute:</td>
   <td nowrap><b>0.97</b></td>
   <td nowrap colspan="3">Absolute equity drawdown:</td>
   <td nowrap colspan="2"><b>1.39</b></td>
</tr>
<tr align="right">
   <td nowrap colspan="3">Gross Profit:</td>
   <td nowrap><b>43.91</b></td>
   <td nowrap colspan="3">Balance Drawdown Maximal:</td>
   <td nowrap><b>6.72 (0.07%)</b></td>
   <td nowrap colspan="3">Equity Drawdown Maximal:</td>
   <td nowrap colspan="2"><b>8.02 (0.08%)</b></td>
</tr>
<tr align="right">
   <td nowrap colspan="3">Gross Loss:</td>
   <td nowrap><b>-26.17</b></td>
   <td nowrap colspan="3">Relative balance drawdown:</td>
   <td nowrap><b>0.07% (6.72)</b></td>
   <td nowrap colspan="3">Relative equity drawdown:</td>
   <td nowrap colspan="2"><b>0.08% (8.02)</b></td>
</tr>

如果我使用

grep --no-group-separator -A1 awdown report2.html | sed -n '/^$/!{s/<[^>]*>//g;p;}'

我得到以下信息。

Balance Drawdown Absolute:
0.97
Absolute equity drawdown:
1.39
Balance Drawdown Maximal:
6.72 (0.07%)
Equity Drawdown Maximal:
8.02 (0.08%)
Relative balance drawdown:
0.07% (6.72)
Relative equity drawdown:
0.08% (8.02)

问题是我需要在带有选项卡的第一行之后有第二行,我不知道如何制作它,并且还需要在第一个选项卡中包含文件名。

预期的输出是这样的:

report2.html    Balance Drawdown Absolute:  0.97
report2.html    Absolute equity drawdown:   1.39
report2.html    Balance Drawdown Maximal:   6.72 (0.07%)
report2.html    Equity Drawdown Maximal:    8.02 (0.08%)
report2.html    Relative balance drawdown:  0.07% (6.72)
report2.html    Relative equity drawdown:   0.08% (8.02)

任何人都可以帮助我如何实现这个输出?

谢谢

标签: unixawksedgrep

解决方案


试试下面的:

grep --no-group-separator -A1 awdown report2.html | sed -n '/^$/!{s/<[^>]*>//g;p;}' | sed '$!N;s/\n//'

我只是在你之后添加了另一个流编辑命令


推荐阅读