알아요
grep -rhI "# Active" > out.txt
출력에는 # Active
검색 디렉터리의 모든 줄이 포함되지만 전체 .txt 파일 내용이 필요하므로 예를 들어 보겠습니다.
예.txt
Line1
Line2
Line3 # Active
Line4
Line5
etc
따라서 grep을 수행하면 이러한 .txt 파일에 포함된 줄 뿐만 아니라 다른 모든 줄도 # Active
출력되기를 원합니다 .# Active
출력.txt
Line1
Line2
Line3 # Active
Line4
Line5
etc
답변1
GNU가 아닌 버전의 경우 grep
사용할 수 없거나 -z
이식성이 필요한 경우...
grep -q pattern file && cat file
-q
모든 출력을 억제하지만 일반적으로 종료 상태는 패턴 일치가 발견되었는지 여부에 따라 설정됩니다. 패턴 일치가 발견되면 grep
성공 코드가 반환됩니다 0
.진짜cat
명령 실행을 허용합니다 .
답변2
일반적으로 grep은 일치하는 줄만 표시합니다.
$ grep -rhI "# Active"
Line3 # Active
전체 파일을 보려면 다음 플래그를 추가하세요 -z
.
$ grep -rhIz "# Active"
Line1
Line2
Line3 # Active
Line4
Line5
etc
-z
grep에게 개행 문자를 "줄" 구분 기호로 사용하지 않고 NUL 문자를 사용하도록 지시하는 GNU 확장입니다. 텍스트 파일에는 일반적으로 NUL 문자가 포함되어 있지 않으므로 grep이 전체 파일을 단일 "라인"인 것처럼 읽도록 지시합니다. 따라서 일치하는 항목이 있으면 전체 파일이 인쇄됩니다.
BSD/OSX 버전의 grep에서는 NUL 입력 옵션을 사용할 수 없으며 -z
다른 의미가 있습니다.
기타 grep 옵션
-r
grep에게 파일과 디렉터리를 재귀적으로 검색하도록 지시합니다.
-I
grep에게 바이너리 파일을 무시하도록 지시
-h
파일 이름을 추가하지 않고 일치하는 항목을 인쇄하도록 grep에 지시합니다.
답변3
sed
선택하다:
sed -e 'H;1h;/PATTERN/!d;x;:do' -e 'n;b do' infile
스크립트는 h
일치하는 라인을 만날 때까지 이전 버퍼에 라인을 축적하고 삭제하는 방식으로 작동합니다. 이 지점에서 더 이상 입력이 없을 때까지 x
버퍼를 변경하고 실행 n
(즉, 인쇄하고 다음 라인을 가져옵니다)합니다.
답변4
여러 파일에 대해 이 작업을 수행하려면 다음을 수행하세요.
cat `grep -rIl "# Active" *`
Grep은 파일 이름 목록을 반환하고 cat은 이를 인쇄합니다.