sedはhtmlタグを見つけて置き換えます。

sedはhtmlタグを見つけて置き換えます。

mdファイル(通常のテキスト)で見つけて置き換える必要があります。

<span class="symbol">&#58771;</span>

これで:

[&#58771;]{custom-style="symbol"}

何度も試してみましたが、何もできませんでした。

sed -i -e 's/\(<span class=\"symbol\">\)&#58771;\(<\/span>\)/\[/&#58771;\]/\{custom-style=\"symbol\"\}/g'myfile.md

または

sed -i -e "s#<span class=\"symbol\">&#58771;</span>#[&#58771;]{custom-style=\"symbol\"}#g" "Dignità umana e bioetica".md

ただし、常に次のエラーメッセージが表示されます。

sed: -e expression #1, char 40: unknown option to `s'

これうまくいくようです(エラーメッセージはありません)。

sed -i -e "s@<span class=\"symbol\">&#58771;</span>@[&#58771;]{custom-style=\"symbol\"}@g" myfile.md

しかし、私はこのコードを受け取りました。

[<span class="symbol">&#58771;</span>#58771;]{custom-style="symbol"} 

新しい文字列は次へ追加、古いものを交換しないでください。

解決済み

おっしゃるとおり、このコマンドは機能します。

sed -i -e 's@<span class="symbol">\&#58771;<\/span>@[\&#58771;]{custom-style="symbol"}@g'

答え1

これは働きます:

sed -i -e "s@<span class=\"symbol\">&#58771;</span>@[\&#58771;]{custom-style=\"symbol\"}@g" myfile.md

\代替テキストが特別なので、その前に使用する必要が&正しく動作します&。これは、「パターンに一致する入力の全部分」を意味する。

からman sed

s/正規表現/交換/

代替項目には、パターン空間の一致する部分を表す特殊文字&、正規表現で一致する対応するサブ式を表す特殊エスケープ文字\ 1〜\ 9を含めることができます。

答え2

これは私には効果があるようです。

# echo '<span class="symbol">&#58771;</span>' > test 
# sed -i -e 's@<span class="symbol">\&#58771;<\/span>@[\&#58771;]{custom- 
style="symbol"}@g' test
# cat test 
[&#58771;]{custom-style="symbol"}

答え3

awkを使う

echo "<span class="symbol">&#58771;</span>" |awk -F'=|>|<' 'BEGIN { OFS=""; }{ print "["$4"]","{cumtom-style=""\""$3"\"""}"}'
[&#58771;]{cumtom-style="symbol"}

答え4

試しているコードにはいくつかの問題があります。

まず、テキストに存在しない文字をコマンドの区切り文字として選択すると、操作が簡単になりますs///。または、\テキストに表示される区切り文字を使用してエスケープする必要があります。

最初のコマンドでは、

sed -i -e 's/\(<span class=\"symbol\">\)&#58771;\(<\/span>\)/\[/&#58771;\]/\{custom-style=\"symbol\"\}/g'myfile.md

発生したエラーは、エスケープされていない/inが原因で発生します。[/&#58771;\]

&また、リテラルを出力テキストに入れるには、\代替式でaを使用してエスケープする必要があります。それ以外の場合は&特殊なものと解釈され、パターン空間の一致する部分に置き換えられます。

簡単にするために、ここ/から不要なエスケープ文字(おそらく?)と不要なエスケープ文字のいくつか(おそらく?)を削除しました[/&#58771;\]/\{custom-style=\"symbol\"\}。また、コマンドは入力テキストに表示されないため、|コマンドの区切り文字として選択しました。s///コマンドは次のとおりです。

sed -e 's|<span class="symbol">&#58771;</span>|[\&#58771;]{custom-style="symbol"}|g'

これがすることです:

$ echo '<span class="symbol">&#58771;</span>' | sed -e 's|<span class="symbol">&#58771;</span>|[\&#58771;]{custom-style="symbol"}|g'
[&#58771;]{custom-style="symbol"}

文字列が静的ではなく、その値に関係なくwithとその周辺を&#58771;置き換えたい場合は、キャプチャグループ()と逆参照(ここ)を使用できます。<span class="symbol">[</span>]{custom-style="symbol"}()\1

sed -e 's|<span class="symbol">\(.*\)</span>|[\1]{custom-style="symbol"}|g'

このコマンドの機能は次のとおりです。

$ echo '<span class="symbol">whatever is here</span>' | sed -e 's|<span class="symbol">\(.*\)</span>|[\1]{custom-style="symbol"}|g'
[whatever is here]{custom-style="symbol"}

最後に、スクリプトの周りに二重引用符(')の代わりに一重引用符(")を使用してsedシェルからスクリプトを保護することを好むかもしれません$。パラメータ拡張、エスケープによってトリガされます\

関連情報