grep을 사용하여 파일 표시

grep을 사용하여 파일 표시

파일의 모든 줄과 일치할 것이라고 생각하기 때문에 grep * filename모든 줄을 인쇄 하고 싶습니다 .filename*

$ cat filename
first line
second line
*
$ grep * filename    #Why won't this print anything?
$ 

왜 안 돼?

답변1

주요 문제:

인용하지 않고 쉘에 직접 넣으면 *쉘은 명령을 실행하기 전에 현재 디렉토리의 파일 목록으로 명령을 확장합니다.

두 번째 용어:

grep기본적으로 정규식은 패턴을 일치시키는 데 사용됩니다. 정규식에서 는 *"패턴이 0번 이상 일치"를 의미하고 마침표( .)는 "모든 문자와 일치"를 의미합니다.

그래서 당신이 원하는 것은 다음과 같습니다: grep ".*" filename. 아니면 그냥 고양이를 이용하세요

답변2

grep ^ filename

모든 줄에는 ^와 일치하는 시작 부분이 있으므로 모든 줄을 인쇄합니다. (정규식 구현에 따라 .* 를 일치시키는 것보다 더 효율적일 수 있습니다.)

grep . filename

완전히 빈 줄(공백과 탭을 포함하여 내용이 없는 줄)을 제거합니다.

grep은 기본적으로 파일 이름을 인쇄하므로 이 명령은 파일이 여러 개 있는 경우 더 유용합니다. 예를 들어 내 시스템에서

grep ^ /proc/sys/kernel/shm*

생산하다

/proc/sys/kernel/shmall:18446744073692774399
/proc/sys/kernel/shmmax:18446744073692774399
/proc/sys/kernel/shmmni:4096
/proc/sys/kernel/shm_next_id:-1
/proc/sys/kernel/shm_rmid_forced:0

그래서 하나의 명령으로 5개의 값을 볼 수 있습니다.

관련 정보