私は次のものを持っています(フォーマットを保存するために私の登録から削除されました。おそらくそれが私がここにいる理由です)。
<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
答え2
これを行うことができます:
sed '/Concrete Patching/ s/<span>/ /; s/(<\/span><span/(flag) <\/li>/' your_file
仕組みは次のとおりです。
- を含む行に対して、
Concrete Patching
次の2つの置換を実行します。 1)最初を<span>
空白に変更し、2)最初を次に(<\/span><span/
変更します。(flag) <\li>
必要に応じて機能していることを確認したら、代わりに-i
交換を追加してください。
sed -i '/Concrete Patching/ s/<span>/ /; s/(<\/span><span/(flag) <\/li>/' your_file