
次の状況の後にスペースを追加したいと思います。
<span class="negrita">ANYTHING</span>
したがって、次のSED命令を使用してください。
sed -E "s/(<span class=\"negrita\">.*?<\/span>)/\1 /g" <<< 'In <span class="negrita">1959</span> economic policy was reoriented in order to undertake <span class="negrita">the country modernization</span>. More text'
私は次のような結果を得ます。
In <span class="negrita">1959</span> economic policy was reoriented in order to undertake <span class="negrita">the country modernization</span> . More text
したがって、見てわかるように、最初の発生以降ではなく、最後の発生以降にスペースが追加されます。 「/g」オプションはすべての項目を置き換える必要があるという意味ではありませんか?
よろしくお願いします。
答え1
*?
標準拡張正規表現演算子ではありません。
sed
またはregexpエンジンの実装に応じて
- BSDなどのエラー報告
- GNUシステムと
.*
同じです。(.*)?
perl
ast- openのように動作する*?
貪欲ではないバージョン*
sed
- 標準演算子ではないので、何でも、またはすべての操作を実行します。
あなたはそれをしたいようですが、3
それを得ているようです2
。おそらくあなたsed
がGNUだからですsed
。
これは-E
標準オプションではありませんsed
(POSIX仕様の次のメジャーバージョンにも表示される可能性があります)。
perl
正規表現演算子を使用するには、以下を使用する必要がありますperl
。
perl -pe 's:<span class="negrita">.*?</span>:$& :g'
(家庭期間sは入れ子になったり、行に分割されません)
またはを使用して、sed
次のことができます(範囲内のコンテンツにが含まれていないと仮定<
)。
sed 's:<span class="negrita">[^<]*</span>:& :g'
答え2
努力する
sed -E "s/(<span class=\"negrita\">[^<]*?<\/span>)/\1 /g"
どこ
[^<]
すべての文字を表すが、<
あなたの例を使って(追加===
)
sed -E "s/(<span class=\"negrita\">[^<]*?<\/span>)/\1=== /g"
提供(手動で折りたたみ)
In <span class="negrita">1959</span>=== economic policy
was reoriented in order to undertake <span class="negrita">the
country modernization</span>=== . More text