[Markdown] 파일의 시작 부분에 파일 이름을 반복적으로 추가합니다.

[Markdown] 파일의 시작 부분에 파일 이름을 반복적으로 추가합니다.

내부에 많은 폴더가 있는 폴더가 있고 각 폴더에는 많은 Markdown 파일이 있습니다. 내가 원하는 것은 재귀적으로(가능한 경우) 각 파일의 헤더로 파일 이름을 얻는 것입니다.

그래서 주어진 foo.md:

The cat sat on the carpet, which is really just endless mat to a cat.

나는 원해요:

# Foo.md

The cat sat on the carpet, which is really just endless mat to a cat.

파일 확장자에는 관심이 없습니다. 뒤에 줄이 있는 유효한 Markdown 헤더 1이라는 사실이 신경 쓰입니다.


내 파일 구조는 다음과 같습니다

md/
  foo/
    heaps.md
    and.md
  bar/
    heaps.md
    of.md
  baz/
    files.md
    omg.md

기타 등등이상적으로는,.sh 또는 유사한 파일에 복사할 수 있는 것을 원하지만 한 줄도 좋을 것입니다!

건배.

답변1

bash의 globstar 및 ed와 일부 PE를 사용해 보십시오. 먼저 몇 가지 샘플 데이터/디렉토리를 시도해 보는 것이 좋습니다.

shopt -s globstar

for f in md/**/*.md; do 
  header=${f##*/} header=${header^}
  printf '%s\n' 0a "# $header" "" . w | ed -s "$f"
done

또는 단일 안감이지만 설정하는 것을 잊지 마십시오globstar

for f in md/**/*.md; do header=${f##*/} header=${header^}; printf '%s\n' 0a "# $header" "" . w | ed -s "$f" ; done

globstar가 아직 열려 있는 동안 파일의 내용을 검사하려면 시도해 볼 수 있습니다.

tail -n+1  md/**/*.md

0버퍼의 주소 또는 줄 번호이며 OR을 나타내는 a연산 입니다.appendadd

추가 기능은 ""파일의 다음 줄 앞에 빈 줄을 만드는 것입니다.

대신 1i(첫 번째 줄에 삽입하는 것을 의미) 0a 도 작동하지만 빈 파일의 경우에는 실패합니다.

.ed에게 파일 편집이 완료되었음을 알리고 w파일에 쓰는 것을 의미합니다.

|에 파이핑하는 ed것은 -s침묵을 의미하며 에 아무 것도 출력하지 않습니다 stdout.

남은 것은 bash 셸의 변수 할당과 PE뿐입니다.

관련 정보