テキストをsedに置き換えます(正規表現として解釈せず)

テキストをsedに置き換えます(正規表現として解釈せず)

bashでテキストを変更したいのですが、そうするのに苦労しています。数年前、他の投稿ではプロセスが非常に複雑なようですが、より簡単で簡単な方法で役立つことを願っています。

これは私のテキストです。

Here is a random sentence that contains [ABC-123](https://app.website.com/random/path/here?query=1) somewhere in the middle of it.

上記のテキストで私が置き換えたいものは次のとおりです。

➜  ~ echo $replace_string
[ABC-123](https://app.website.com/random/path/here?query=1)

私はこれをこれに変えようとしています:

➜  ~ echo $replace_with
<https://app.website.com/random/path/here?query=1|[ABC-123]>

結局、GitHubで解釈されたMarkdownをSlackで解釈されたMarkdownに変換しようとしました(何らかの理由で独自の方法があります)。

私は試してみましたが、sed代替文字列を正規表現として解釈しようとし続けるので、うまくいきます。

➜  ~ echo $contents
Here is a random sentence that contains [ABC-123](https://app.website.com/random/path/here?query=1) somewhere in the middle of it.
➜  ~ echo $replace_string
[ABC-123](https://app.website.com/random/path/here?query=1)
➜  ~ echo $replace_with
<https://app.website.com/random/path/here?query=1|[ABC-123]>
➜  ~ echo $contents | sed "s/$replace_string/$replace_with/g"
sed: 1: "s/[ABC-123](https://app ...": RE error: invalid character range

sed他のユーティリティや他の同等の方法を使用して正規表現の解釈を解除する簡単な方法はありますか?テキスト自体を変更するだけでなく、多くのsedテキストが異なる場合があるため、テキストを保持する変数を使用できることを願っています。

ベストアンサー1

その後、これらの特殊文字をエスケープする必要があります。

sed 's@\[ABC-123](https://app.website.com/random/path/here?query=1)@<https://app.website.com/random/path/here?query=1|\[ABC-123]>@'

すべての「/」をエスケープする必要がないように、「@」を構文区切り文字として使用します。

おすすめ記事