いくつかのテキストがあり、そのうちのいくつかはでマークされています_{...}
。閉じる下線と中括弧のペアをアスタリスクで置き換える必要があります。たとえば、Hello _{world} _{foo}
になりますHello *world* *foo*
。
sed -r 's/_\{([^}]+)}/*\1*/g'
これは、中かっこエスケープを含めることができるという事実でなければ簡単に解決できる簡単な問題です。たとえば、テキストは次のようになります。
Hello _{world \} \}} _{foo bar}
結果は次のとおりです。
Hello *world } }* *foo bar*
どうすればいいですか?
ベストアンサー1
バックスラッシュが「次の文字エスケープ」(中括弧、他のバックスラッシュ、または行末を除くすべての文字)を意味する場合は、次の文字を次のように「スキップ」できます。
sed -r 's/_\{((\\.|[^}\\])+)\}/*\1*/g
バックスラッシュが中括弧の前でのみ特別な意味を持つ場合は、バックスラッシュを1つ以上実行するたびに、バックスラッシュではなく最初の文字を「スキップする」必要があります。
sed -r 's/_\{((\\+[^\]|[^}\\])+)\}/*\1*/g'