我有一个像这样的文本文件。
<tbody>
<tr>
<td>
String1
</td>
<td>
String2
</td>
<td>
String3
</td>
...
...
<td>
StringN
</td>
</tr>
</tbody>
这是我想要的输出。
<tbody>
<tr>
String1;String2;String3;... ...;StringN
</tr>
</tbody>
这是我的BUGGY代码。
sed '{
:a
N
$!ba
s|<td.*>\(.*\)</td>|\1|
}'
我想删除所有<td>
和</td>
标记,并通过某些字符串获取所有字符串(我可以稍后使用该字符串过滤这些字符串作为分隔符字符)。我使用了这个URL中给出的解决方案。输出并不像我预期的那样。
这是实际的代码
<tbody>
<tr>
<td>
<a href="/120.52.72.58/80">120.52.72.58:80</a>
</td>
<td>
HTTP
</td>
<td>
<span class="text-danger">Transparent</span>
</td>
<td>
<abbr title="2016-12-15 00:07:46">12h ago</abbr>
</td>
<td class="small">
<span class="text-muted">—</span>
</td>
<td>
<img src="/flags/png/cn.png" alt="China (CN)" title="China (CN)" onerror="this.style.display='none'"> <abbr title="China">CN</abbr>
</td>
<td class="small">
Beijing
</td>
<td class="small">
Beijing
</td>
<td class="small">
China Unicom IP network
</td>
<td class="small">
<span class="text-muted">—</span>
</td>
</tr>
</tbody>
答案 0 :(得分:0)
输出不符合我的预期。
您的sed
代码不起作用,因为由于{{3},<td.*>\(.*\)</td>
匹配了从前一个<td
到最后一个</td>
的部分模式空间。 *
量词的}}。不幸的是,sed
不支持带有不合要求的量词的更现代的正则表达式。因此,其他一些工具会更合适。
我想删除所有
<td>
和</td>
标签,并获取所有由某个字符串定界的字符串…
如果这些标记始终(如您的示例中)始终位于单独的行中,则可以使用简单的sed
命令:
sed '/<\/*td.*>/d'
所有字符串之后都用某个字符串分隔,该字符串是\n
,后跟空格。