마크다운 파일에서 삼중 백틱 울타리 코드 블록 추출`` 발췌

마크다운 파일에서 삼중 백틱 울타리 코드 블록 추출`` 발췌

많은 코드가 포함된 pandoc markdown 파일이 있습니다. sed.pandoc의 코드 구문은 코드 세그먼트를 시작하고 끝내는 3개 이상의 ```` 기호입니다 .

```
Code is here
```

행을 추출할 수 있지만 추출할 수 없습니다.마커 사이.

답변1

sed -n '/^```/,/^```/ p' < input.file

``` 사이의 모든 줄이 인쇄되지만, ``` 줄도 인쇄됩니다. 그것을 제거하려면:

sed -n '/^```/,/^```/ p' < input.file | sed '/^```/ d'

패턴별로 줄 범위를 사용하는 방법과 여기에서 시작하는 "p" 및 "d" 명령에 대한 지침을 찾을 수 있습니다.

http://www.grymoire.com/Unix/Sed.html#uh-29

답변2

노트: 저는 rundoc의 주요 개발자이자 유지관리자입니다.


이런 종류의 작업을 위한 일반적인 도구를 찾는 사람은 다음과 같습니다.

문서 실행Markdown 파일에서 보호된 코드 블록을 실행하거나 추출하기 위한 일반적인 도구입니다. python3의 경우 pip를 통해 설치할 수 있습니다 pip3 install rundoc.

코드 블록을 추출합니다.

rundoc list-blocks your_file.md -t#bash#perl#python

bash로 표시 되거나 강조 표시된 perl코드 블록이 추출됩니다 . python안타깝게도 강조 표시된 태그가 없는 코드 블록은 항상 무시됩니다.

마크다운 파일을 스크립트로 실행할 수도 있습니다.

rundoc run your_file.md -t#bash#perl#python

그러면 일치하는 강조 표시가 있는 모든 코드 블록이 실행되고 강조 표시를 사용하여 올바른 인터프리터를 찾습니다.

노트:JSON이나 헤더 없이 순수 코드를 얻으려면 jq다음 도구를 사용하세요.

rundoc list-blocks your_file.md | jq -r "(.code_blocks[] | {code}).code"

답변3

pandoc 자체를 사용하여 모든 코드 블록에서 코드를 추출할 수 있습니다. (이 지침은 pandoc 버전 2.0 이상에 적용됩니다. 추가 소프트웨어는 필요하지 않습니다. pandoc에는 lua 인터프리터가 포함되어 있습니다.)

다음 내용으로 파일을 만듭니다 extractcode.lua.

function CodeBlock(el)
    print(el.text)
end

이제 아래와 같이 pandoc을 실행하세요 myfile.md. 마크다운 파일은 어디에 있나요?

pandoc --lua-filter extractcode.lua myfile.md -o /dev/null

그러면 모든 코드 블록의 내용이 인쇄됩니다. 포함된다는 점 참고해주세요모두들여쓰기된 코드 블록을 포함한 의 코드 블록 myfile.md입니다. 다른 답변에서 제안된 sed 솔루션과 달리 목록 항목이나 블록 참조와 같이 들여쓰기된 컨텍스트에 나타나는 코드 블록도 포함됩니다.

1.  ```lua
    a = 5
    ````

> ```
> my code
> ```

그리고 백틱이 구분 기호가 아닌 코드 블록의 일부인 다음과 같은 경우에는 혼동되지 않습니다.

````
```
code example with three backticks as part of the code block
```
````

답변4

다음을 사용할 수도 있습니다 perl.

perl -0777e '$_=<>;print $1 while /^`{3,}\s*\n(.*?)^`{3,}\s*\n/msg' your_file

설명하다

  • 전체 파일을 읽을 수 있도록 0777입력 레코드 구분 기호( )를 설정하는 섹션입니다 .$/
  • 정규식은 3개 이상의 역따옴표로 시작하는 줄을 찾은 다음 *?3개 이상의 따옴표로 시작하는 줄 다음에 가능한 한 적은 수의 줄(게으른 수량자 보장)을 일치시키고 캡처합니다.
  • 정규식 수정자는 파일의 시작 부분뿐만 아니라 줄의 시작 부분도 일치하는지 m확인합니다 . ^수정자는 여러 줄이 일치할 수 있도록 개행이 일치하는지 s확인합니다 . 마지막으로 모든 일치 항목을 찾을 수 있도록 정규식이 파일 내용에 반복적으로 적용되는지 확인하십시오...*?g

관련 정보