簡體   English   中英

如何用sed匹配和替換多行html文件

[英]How to match and replace multiline html file with sed

我有一個類似這樣的文本文件。

<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">&mdash;</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">&mdash;</span>
                </td>
            </tr>
</tbody>

輸出不符合我的預期。

sed代碼不會因為工作<td.*>\\(.*\\)</td>匹配模式空間的從第一部分<td直到最后</td>由於貪婪*量詞。 不幸的是, sed不支持帶有不合要求的量詞的更現代的正則表達式。 因此,其他一些工具會更合適。

我想刪除所有<td></td>標記,並用某個字符串分隔所有字符串……

如果這些標記始終(如您的示例中)始終位於單獨的行中,則可以使用簡單的sed命令進行操作:

sed '/<\/*td.*>/d'

所有的字符串由一些字符串此后被分隔\\n其次是空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM