REGEX 검색 및 sed 또는 기타 명령으로 바꾸기

REGEX 검색 및 sed 또는 기타 명령으로 바꾸기

다음 내용이 포함된 대용량 SQL 파일이 있습니다.

[code language="bash"]
git checkout master
git pull origin master
...
[/code]
Lorem ipsum dolor sit amet, consectetur adipiscing elitUt enim ad minim 
[code]some other code[/code]
veniam, quis nostrud exercitation
[code language="php"]var_dump($data);[/code]

[code language="{lang}"]{wrapped-code}[/code]나는 로 교체하고 싶다<pre><code class="language-{lang}">{wrapped-code}</code></pre>

최종 출력은 다음과 같습니다.

<pre><code class="language-bash">
git checkout master
git pull origin master
...
</code></pre>
Lorem ipsum dolor sit amet, consectetur adipiscing elitUt enim ad minim 
<pre><code>some other code</code></pre>
veniam, quis nostrud exercitation
<pre><code class="language-php">var_dump($data);</code></pre>

sed나 다른 찾기 및 바꾸기 명령을 사용하여 이를 달성하는 방법을 알려주십시오.

답변1

sed -e 's/\[code language="\([^"]*\)"\]/<pre><code class="language-\1">/' \
    -e 's!\[/code\]!</code></pre>!' \
    < input  > output

대괄호는 문자 집합을 나타내지 않도록 이스케이프 처리해야 합니다. 그런 다음 두 번째 검색 및 바꾸기에 사용할 따옴표 사이의 텍스트를 캡처하여 피하기 위해 구분 기호 \1로 사용합니다.!기울어진 이쑤시개 증후군HTML 닫는 태그로 바꿉니다.

관련 정보