찾다

찾다

AsciiDoc 파일의 모든 텍스트 주석을 정리합니다. AsciiDoc은 Markdown과 유사한 파일 형식이지만 다음과 같이 첫 번째 수준 제목을 나타내는 데 #사용합니다 .=

첫 번째 파일.adoc

= How To Install MySQL 8.0 on Fedora

두 번째 파일.adoc

= Summaries and Notes From Books I've Read

각 파일에 하나의 "단 하나의" 첫 번째 수준 헤더가 포함되어 있고 = This is a First-Level Heading항상 1번째 줄에 있다는 것을 알고 있는 경우, 내 목표는 grep이러한 첫 번째 수준 헤더만 사용하여 모든 파일을 검색하는 것입니다.

이 grep 명령은 두 번째 파일과 일치합니다.

grep -in '^= .*ooks' *.adoc

이것은 의미가 있고 나에게 필요한 것입니다. 그러나 내 터미널은 "books"라는 단어 앞의 모든 항목을 빨간색으로 강조 표시하고 "I have read"의 나머지 부분은 흰색으로 남겨둡니다. 이게 정상인가요?

= 책에 대한 요약 및 메모나는 읽었다

답변1

grep 솔루션

찾다

grep '^=.*rst.*$' *.adoc

어디

  • ^줄의 시작
  • =동일한
  • .*뭐든지 몇 번이라도
  • rst첫 번째 문자열
  • .*뭐든지 몇 번이라도
  • $줄 끝

발견된 파일과 줄이 나열됩니다.

first.adoc:= The title of the first file

결과 인쇄

grep은 일치를 트리거한 행의 부분을 강조 표시하므로

grep '^=.*rst' *.adoc

강조될 것이다

첫 번째.adoc:= 첫 번째 제목문서

줄 끝까지 검색하라는 요청이 없기 때문입니다.

grep '^=.*rst.*$' *.adoc

강조될 것이다

첫 번째.adoc:= 첫 번째 파일의 제목

요청이 줄 끝까지 검색되기 때문입니다.

파일만 사용 -l(또는 --file-with-matches)

grep -l '^=.*rst' *.adoc

파일 이름을 나열하지 않고 행만 나열하려면 -h(또는 --no-filename)을 사용하십시오.

바라보다man grep

답변2

awk지원되는 GNU 버전 에 액세스할 수 있는 경우 nextfile해야 할 일은 다음과 같습니다.

awk '{ if ( $0 ~ /fifth/ ) print FILENAME  ; nextfile }' *.adoc

답변3

귀하의 질문을 올바르게 이해했다면 전체 제목이 강조표시되기를 원하실 것입니다.

이 경우 표현식 끝에 .*를 추가하면 됩니다. grep은 일치 표현식과 일치하는 행의 과거 부분을 빨간색으로 표시합니다.

관련 정보