対象:![alttext](url.png)
に置き換えます<img src="url.png" alt="alttext">
。
!
一部は(...)
うまくいきますが、この[...]
部分は私がうまくいきません。
簡単な例として、 input と一致させたいと思いますa [test] b
。これは私が使用するコマンドです:
echo 'a [test] b' | sed 's/\[[^\]]*\]/x/'
これはうまくいきません。角かっこを山かっこで置き換えると正常に動作します。
echo 'a <test> b' | sed 's/<[^>]*>/x/'
sedが同じ正規表現を理解していませんが、エスケープされた角かっこを使用するのはなぜですか? Pythonなどの他のツールでもうまく機能します。
答え1
文字クラス定義で]
が直後に来ると、文字通り実行されます^
。だからここから逃げないでください。また、+
「1つ以上の文字」または*
「0以上の文字」を意味するなどの数量子がありません。また、コマンドラインにあまりにも多くの項目がありますsed
。
$ echo 'a [test] b' | sed 's/\[[^]]\+\]/x/'
a x b
(\+
GNU拡張(現在他の実装でもサポートされています)として標準に該当するものは\{1,\}
)
またはもっと読みやすいです。
$ echo 'a [test] b' | sed -E 's:\[[^]]+\]:x:'
a x b
(-E
BSD拡張により、sed
GNUおよび他のいくつかの実装でもサポートされ、-r
以前のバージョンのGNUで使用されますsed
。)