这是我在 stack Overflow 上发表的第一篇文章,所以如果我做错了什么,请告诉我! 我已经为此搜索了几个小时,但找不到完整的解决方案。我可以选择其中之一,但不能同时获得两者。
我不想将一个 awk 命令通过管道传输到另一个命令。 相反,我想使用单行 awk 命令。
我有一个网页的curl输出,我想用awk(常规awk,无gawk,mawk等)更改它。 我想获取单词
Downstream Channel Status
之后和 </table>
出现 first之前的所有行。 然后,在提到的匹配之间,应删除
<tr align='center'>
和 </tr>
之间的所有换行符。不需要打印具有上述匹配的行。但如果解决方案不能,我可以解决它
这是curl 的(缩短的)输出(保存在变量中)。
<html>
<head>
</head>
<body>
<blockquote>
<p>
<table border="1" cellpadding="4" cellspacing="0">
<tr><th colspan=3><b>Startup Procedure</b></th></tr>
</table><br>
</p>
<p>
<table border='1' cellpadding='4' cellspacing='0'>
<tr><th colspan=13><b>Downstream Channel Status</b></th></tr>
<tr align='center'>
<td class='hd'>Channel Index</td>
<td class='hd'>Channel ID</td>
</tr>
<tr align='center'>
<td>1</td>
<td>10</td>
</tr>
<tr align='center'>
<td>2</td>
<td>1</td>
</tr>
<tr align='center'>
<td>3</td>
<td>2</td>
</tr>
<tr align='center'>
<td>4</td>
<td>3</td>
</tr>
</table><br><br>
</p>
<p>
<table border='1' cellpadding='4' cellspacing='0'>
<tr><th colspan=9><b>Upstream Channel Status</b></th></tr>
<tr align='center'>
<td class='hd'>Channel Index</td>
<td class='hd'>Channel ID</td>
</tr>
<tr align='center'>
<td>1</td>
<td>9</td>
</tr>
<tr align='center'>
<td>2</td>
<td>10</td>
</tr>
<tr align='center'>
<td>3</td>
<td>11</td>
</tr>
</table><br><br>
</p>
</blockquote>
</body>
</html>
我几乎找到了解决方案,但后来我的电脑崩溃了,现在我的 bash 历史记录消失了。 但我尝试结合如何打印两个模式之间的行,包含或排除(在 sed、AWK 或 Perl 中)?和删除两个模式之间所有出现的新行(sed 或 awk?)
最后我想以这几行结束:
<td class='hd'>Channel Index</td><td class='hd'>Channel ID</td>
<td>1</td><td>193</td>
<td>2</td><td>1</td>
<td>3</td><td>2</td>
<td>4</td><td>3</td>
如果您有适合我的解决方案,您能解释一下它是如何工作的吗?
谢谢!
这适用于您的输入。显然,
Downstream Channel Status
数量的任何变化都会破坏功能。
% awk '/<\/table>/ && set1 == 1{set1--}
/Downstream Channel Status/{set1++}
set1 == 1 && set2 > 0 && !/tr.*>/{sub(/ */,"",$0); printf("%s", $0)}
set1 == 1 && set2 > 0 && /<.tr>/{print ""}
/<tr align=.center.>/{set2++}' fhtml
<td class='hd'>Channel Index</td><td class='hd'>Channel ID</td>
<td>1</td><td>10</td>
<td>2</td><td>1</td>
<td>3</td><td>2</td>
<td>4</td><td>3</td>
% cat fhtml
<html>
<head>
</head>
<body>
<blockquote>
<p>
<table border="1" cellpadding="4" cellspacing="0">
<tr><th colspan=3><b>Startup Procedure</b></th></tr>
</table><br>
</p>
<p>
<table border='1' cellpadding='4' cellspacing='0'>
<tr><th colspan=13><b>Downstream Channel Status</b></th></tr>
<tr align='center'>
<td class='hd'>Channel Index</td>
<td class='hd'>Channel ID</td>
</tr>
<tr align='center'>
<td>1</td>
<td>10</td>
</tr>
<tr align='center'>
<td>2</td>
<td>1</td>
</tr>
<tr align='center'>
<td>3</td>
<td>2</td>
</tr>
<tr align='center'>
<td>4</td>
<td>3</td>
</tr>
</table><br><br>
</p>
<p>
<table border='1' cellpadding='4' cellspacing='0'>
<tr><th colspan=9><b>Upstream Channel Status</b></th></tr>
<tr align='center'>
<td class='hd'>Channel Index</td>
<td class='hd'>Channel ID</td>
</tr>
<tr align='center'>
<td>1</td>
<td>9</td>
</tr>
<tr align='center'>
<td>2</td>
<td>10</td>
</tr>
<tr align='center'>
<td>3</td>
<td>11</td>
</tr>
</table><br><br>
</p>
</blockquote>
</body>
</html>