많은 파일이 포함된 디렉토리가 있습니다 *.org
. 정리된 모든 파일 중에서 텍스트를 선택하고 싶습니다. * Learnings
내용에 제목이 있습니다. * Learnings
파일의 처음부터 끝까지 선택하고 싶습니다 .
내 현재 시도는
find ~/org/journal -name "*.org" -type f | xargs sed -n -e '/\*\ Learnings/,$p'
그러나 이는 연결된 스트림만 출력합니다.
* Learnings
예상되는 출력은 조회에서 반환된 각 파일의 헤더 다음에 나오는 콘텐츠 스트림입니다.
또한 솔루션확실히사용해야 한다sed
답변1
GNU 구현에서는 aka 옵션을 사용하여 각 파일을 개별적으로 처리 sed
할 수 있습니다 .-s
--separate
find . -name '*.org' -type f -exec sed -s '/\* Learnings/,$!d' {} +
그리고 awk
:
find . -name '*.org' -type f -exec awk '
FNR == 1 {found = 0}; /\* Learnings/ {found = 1}; found' {} +
답변2
Perl에서는 다음을 사용할 수 있습니다.에브이는 파일의 모든 끝에서 적용됩니다.
find . -type f -name '*.org' -exec perl -ne 'print if /\* Learnings/ .. eof' {} +
사용된 +
형식 -exec
은 다음과 유사합니다 xargs
. 발견된 모든 파일을 추가하여 지정된 명령에 대한 인수를 작성합니다.
답변3
이것이 일종의 숙제가 아니라면 ;-), 다음을 사용할 수 있습니다.여기GNU 또는 *BSD grep을 사용하십시오.
grep -hrFA 10000 '* Learnings' directory
파일이 10,000줄을 초과하는 경우 10,000을 더 큰 값으로 바꾸세요.
답변4
Gnu sed에서 확인해보세요.
find ~/org/journal -iname "*.org" -type f -exec sed -nE '/\*\sLearnings/,$ p' '{}' +
실제로 편집하고 저장하면 소스는 확장자가 .o인 파일에 있습니다.
find ~/org/journal -iname "*.org" -type f -exec sed -i.o -nE '/\*\sLearnings/,$ p' '{}' +