
정규식을 배우려고 해서 일부 문자가 포함된 파일을 만들었습니다. cat 명령을 사용하고 이를 텍스트 필터링 인수와 함께 rgrep 명령에 파이프하면 생성되는 출력은 "filename:filtered_text"입니다.
cat regex.txt | rgrep -E '^a'
regex.txt:a
regex.txt:aa
regex.txt:aaa
regex.txt:aaaa
regex.txt:aaaaa
regex.txt:aaaaaa
file:acpi
file:adduser.conf
file:aliases
file:aliases.db
file:alternatives
file:anacrontab
file:apache2
file:apg.conf
file:apm
file:apparmor
file:apparmor.d
file:apport
file:appstream.conf
file:apt
file:avahi
뿐만 아니라 폴더의 다른 파일을 확인하고 정규식과 일치하면 단일 파일만 파이핑하더라도 해당 파일을 표시합니다.
cat에 전달된 파일의 내용만 포함된 일반 출력을 얻으려면 어떻게 해야 합니까?
답변1
-h
with 플래그는 파일 이름을 인쇄하는 플래그 rgrep
이므로 사용해야 합니다 . rgrep
이 플래그는 이를 방지합니다.
왜 rgrep
simple grep
and cat
. 따라서 우선 그럴 필요가 없습니다 cat
. grep PATTERN FILE
충분한. 두 번째 rgrep
상응 하는 플래그 는 grep -r
다음과 같습니다 .-r
grep
-r, --재귀 각 디렉토리 아래의 모든 파일은 기호 링크가 명령줄에 있는 경우에만 반복적으로 읽혀집니다. 파일 피연산자가 제공되지 않으면 grep은 작업 디렉토리를 검색합니다. 이는 -d 재귀 옵션과 동일합니다.
간단한 해결 방법을 찾으려면 다음을 시도해 보세요.
grep '^a' regex.txt
(이 모드에서 해당 스위치를 사용하는 이유는 확실하지 않습니다 -E
.)
답변2
rgrep
바로가기입니다(내 우분투 18.04: 스크립트) grep -r
. man grep
:
-r, --recursive Read all files under each directory, recursively,
실제로 는 무시되는 것 같아서 cat
사용하는데 아무런 의미가 없습니다 .rgrep