많은 코드가 포함된 pandoc markdown 파일이 있습니다. sed
.pandoc의 코드 구문은 코드 세그먼트를 시작하고 끝내는 3개 이상의 ```` 기호입니다 .
```
Code is here
```
행을 추출할 수 있지만 추출할 수 없습니다.마커 사이.
답변1
sed -n '/^```/,/^```/ p' < input.file
``` 사이의 모든 줄이 인쇄되지만, ``` 줄도 인쇄됩니다. 그것을 제거하려면:
sed -n '/^```/,/^```/ p' < input.file | sed '/^```/ d'
패턴별로 줄 범위를 사용하는 방법과 여기에서 시작하는 "p" 및 "d" 명령에 대한 지침을 찾을 수 있습니다.
답변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