VimまたはSedの複雑な検索と置換

VimまたはSedの複雑な検索と置換

私は次のものを持っています(フォーマットを保存するために私の登録から削除されました。おそらくそれが私がここにいる理由です)。

<li><span>Concrete Patching (</span><span
        style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 16.00px; height: 16.00px;"><img
          alt=""
          src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4XmP4//8dAwAI2gLt+1m1FgAAAABJRU5ErkJggg=="
          style="width: 16.00px; height: 16.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
          title=""></span>)</li>
    <li><span>Paving (</span><span
        style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 16.00px; height: 16.00px;"><img
          alt=""
          src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4XmP4//8tAwAI2ALsJ7n0vAAAAABJRU5ErkJggg=="
          style="width: 16.00px; height: 16.00px; margin-left: -0.00px; margin-top: -0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
          title=""></span>)</li> 

私はそれが次になりたいと思います:<li> Concrete Patching (flag) </li>、それはすべてです。

編集する: 各タグ内の文字列は<li><span> (...どの文字列でも構いません。<span>それぞれの最初の文字を削除して<li>まですべて保持し、(最大まですべてに)置き換えたいと思いますflag。明確にできず申し訳ありません。


このパターンはディレクトリ内のすべてのファイルに表示されるため、バッチ操作を使用するのがsed理想的ですが、それについては確信がありません。Vim単一のバッファを使用してプルされた:%s/<C-r>"レジスタをコマンドに入れて、エスケープしたい項目(<\/span>newlinesなど)をエスケープしようとしましたが、\r正しく実行できませんでした。

上記のように複雑なフルブロックで簡単にプラグインを実行できるプラグインがあれば使用しますが:%s、そのどれも私が必要な方法で正しく実行するために必要な正規表現パターンを尊重しないようです。

私は仕事でほぼ同じテキストをたくさん置き換えて手動で編集するのに数時間かかりますが、正規表現パターンを使用すると数分かかることがあります。どんな提案でも自由に送ってください。

ベストアンサー1

次の-zオプションをお勧めしますsed

$ sed -z 's;<li><span>\([^(]*\)(</span><span[^<]*<img[^>]*></span>);<li> \1(flag) ;g' file
<li> Concrete Patching (flag) </li>
    <li> Paving (flag) </li> 

これは、「特定のパッチ」が任意の文字列である可能性があることを考慮します。

-z, --null-data
                 separate lines by NUL characters

おすすめ記事