我只是想替换 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]>@'
我使用“@”作为语法分隔符,这样就不需要转义每一个“/”。
答案2
看来你可以pandoc
与以下过滤器一起使用https://github.com/omarish/pandoc-md-to-slack