私のHTMLファイルに次の文字列が複数回表示されます。
<br> <h4 id=...
さて、sedがhtmlの編集に適していない可能性があることを知っていますが、withに置き換える方法を教えてくださいbr> <h4 id
(ここで「\ n」は新しい行です。andbr>\n <h4 id
の間にスペースがあります)?<br>
<h4...
試してみましたがsed 's/br> <h4 id/br> \n<h4 id/g' report.html
成功しませんでした。このstackexchangeにはsedと改行の交換に関する他の質問がありますが、私の場合は適用されません。ありがとうございます!
修正する:私はWindowsコンピュータでVisual Studio Code bashターミナルと(Git)Bashを実行しています(一種のMINGW64です)。
答え1
コマンド置換セクションの改行文字は、改行文字が続くように移植可能にs
sed
表示されます。\
sed 's/br> <h4 id/br>\
<h4 id/g' report.html
または:
sed 's/\(br>\) \(<h4 id\)/\1\
\2/g' report.html
一部のsed
実装では\n
これを許可しますが、これは非標準拡張です。
いくつかの実装では、(そしてPOSIX標準の次のメジャーバージョンでは標準になる可能性があります)、改行(およびバックスラッシュ文字)に拡張される引用符形式(元のksh93に由来)をsh
使用できます。したがって、これを使用して次のことができます。$'...'
\n
\\
sed $'s/\(br>\) \(<h4 id\)/\1\\\n\2/g' report.html
同じ次のバージョンの標準では、オプション-E
(sed
BSDでsed
有効)も導入される予定です。延長する正規表現を使用すると、次のことができます。
sed -E $'s/(br>) (<h4 id)/\1\\\n\2/g' report.html
答え2
試してみてください
sed 's/br>[[:blank:]]*<h4 id/br> \n<h4 id/g'
br>
との間には複数のスペースがある場合<h4
とない場合があります。