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