"grep"이 일반적인 "ls" 명령과 약간 다른 결과를 제공하는 것처럼 보이는 이유는 무엇입니까? [복사]

"grep"이 일반적인 "ls" 명령과 약간 다른 결과를 제공하는 것처럼 보이는 이유는 무엇입니까? [복사]

일부 파일이 포함된 디렉토리가 있습니다.

mkdir _tmpmm
touch a1 b2 c3 d4
ls
# a1  b2  c3  d4

내가 찾을 때출력 결과에는 ls파일만 표시됩니다.a1- ls출력에는 4개의 파일이 표시되지만같은 줄

ls | grep a
# a1

그러나 다음 줄을 포함하는 "file_with_names.txt"라는 파일을 생성하면 -

cat file_with_names.txt
# a1 b2 c3 d4
# xxx
# zaz

그런 다음 어떤 작업을 수행

grep a file_with_names.txt

또는

cat file_with_names.txt | grep a

나는 얻다-

# a1 b2 c3 d4
# zaz

그래서 내 질문은 - 왜 greping을 하는가?출력 에서 ls전체 라인을 반환하지 않습니다 . 즉 a1 b2 c3 d4?

답변1

명령 grep이 주어진 입력과 일치합니다.

ls여기서 입력은 (나쁜 습관이지만 지금은 무시합시다) 의 출력 이므로 일치 항목은 다음을 포함하는 단일 파일 이름입니다 a.

ls | grep a

여기서 입력은 출력 cat이고 출력은 파일의 내용입니다 file_with_names.txt.

cat file_with_names.txt | grep a

4개의 파일 이름을 포함하는 grep현재 보고 있는 출력과 일치하지 않는 이유를 묻는다면 이는 사람이 볼 수 있도록 터미널에 기록했는지 여부와 후속 보기를 위해 파이프에 기록했는지 여부에 따라 다른 출력을 생성하기 때문입니다. . 파이프에 쓸 때 어떤 출력이 나오는지 확인하려면 다음을 시도해 보세요.lsls

ls | cat

일반적으로 의 출력을 구문 분석하지 않는 것이 가장 좋습니다 ls. 일반적으로 파일 이름 목록을 얻는 더 좋은 방법이 있습니다.

관련 정보