SEDマルチライン交換とスペース保存

SEDマルチライン交換とスペース保存

私は今週SEDについてさらに学び、次のサンプルコードを試しました。

    </td>
    <td>
        <h4 class="text-danger" style="display: inline;">**Rádio Club 88 FM**</h4>
        <br>
        <b></b><br>

        <br>Genres: various<!--
        <br><samp>19 http://67.228.135.41:8216/listen.pls shoutcast1 audio/mpeg</samp>
        <div id="jplayer_inspector_19"></div>-->
    </td>
    <td width="120" class="text-right hidden-xs">
        <p>
        24 Listeners<br>
         128 Kbps<br>
        </p>
        <a style="margin:1px" class="btn btn-default btn-xs" onClick="ga('send', 'event', 'tunein', 'playpls', 'http://67.228.135.41:8216/listen.pls');" href="/servers/tools/playlistgenerator/?u=http://67.228.135.41:8216/listen.pls&amp;t=.pls">PLS</a>
        <a style="margin:1px" class="btn btn-default btn-xs" onClick="ga('send', 'event', 'tunein', 'playm3u', 'http://67.228.135.41:8216/listen.pls');" href="/servers/tools/playlistgenerator/?u=http://67.228.135.41:8216/listen.pls&amp;t=.m3u">M3U</a>
        <a style="margin:1px" class="btn btn-default btn-xs" onClick="ga('send', 'event', 'tunein', 'playram', 'http://67.228.135.41:8216/listen.pls');" href="/servers/tools/playlistgenerator/?u=http://67.228.135.41:8216/listen.pls&amp;t=.ram">RAM</a>
        <a style="margin:1px" class="btn btn-default btn-xs" onClick="window.open('/player/?mount=http://67.228.135.41:8216/listen.pls&amp;title=Rádio Club 88 FM&amp;website=http://www.shoutcast.com','PopupPlayer','width=400,height=300'); ga('send', 'event', 'tunein', 'playpopup', 'http://67.228.135.41:8216/listen.pls');" href="#">FLA</a>
    </td>

私の目標は、2つの異なる行で解析され、予約済みスペースを使用して一緒に再組み立てされる次の結果を得ることです。

提案された出力

何が必要ですか?最初のゲーム商標区切り記号でセカンドゲーム

Soundzrise RADIO  \t http://94.23.66.114:8122
::| ([bAm BaM RADIO]) |:: \t http://www.bambamradio.com:8888
NRGRadio.nl \t http://188.138.56.235:27914 

使用できる2つのSEDコマンドがあります。

最初のゲーム

is the H4 line, i am extracting what is between the ">" and "<"  
COMMAND =sed -rne 's/.*<h4 class=.*>(.*)<\/h4>/\1/ip'

セカンドゲーム

is the http address in line containing "playpls" - 
Command =  sed -rne "s/.*playpls', '(.*)\/listen.pls'.*/\1/p"

私の問題は、予約されたスペースを正しく使用することと組み合わせられています。私はいくつかのバリエーションを試しました。しかし、当時は職業を持った人は誰もいませんでした。つまり

sed -rne 's/.*<h4 class=.*>(.*)<\/h4>/\1/i;h' -e "s/.*playpls', '(.*)\/listen.pls'.*/\1/;G;p"

ベストアンサー1

もしあなたなら〜しなければならない(XSLTの代わりに)または予約済みスペースを使用する方法をよりよく理解するには、次の手順を実行するsed必要があります。

H4スペースを節約するには、次の行を保存してください。

/<h4 /h

この行が表示されたら、playpls予約済みのスペースを追加してください。

/ 'playpls',/{
G
# do something here
}

パターンスペースは次のようになります。

<a style="margin:1px" class="btn btn-default btn-xs" onClick="ga('send', 'event', 'tunein', 'playpls', 'http://67.228.135.41:8216/listen.pls');" href="/servers/tools/playlistgenerator/?u=http://67.228.135.41:8216/listen.pls&amp;t=.pls">PLS</a>
<h4 class="text-danger" style="display: inline;">**Rádio Club 88 FM**</h4>

(挿入された改行を含む)したがって、対応するコメントを次のように置き換えることができます。

s/.*'playpls', '\([^']*\)'.*\n.*<h4 [^>]*>\([^<>]*\).*/\2\t\1/p

sed -n置換と一致するパターンスペースのみを印刷するようにスクリプトを実行します。

実際に予約されたスペースを追加しないと一致を取得できないため、中かっこを使用せずにこれをすべて実行できます。

#!/bin/sed -rnf
# I've assumed GNU sed above

/<h4 /h
/ 'playpls',/G
/\n/s/.*'playpls', '([^']+)'.*\n.*<h4 [^>]+>([^<>]+).*/\2\t\1/p

おすすめ記事