"ls -a | grep ^\."의 이상한 동작

"ls -a | grep ^\."의 이상한 동작

비밀번호 내용을 나열하고 점으로 시작하는 파일만 표시하고 싶습니다. 시도했지만 ls -a | grep ^\.왜 출력에 점으로 시작하지 않는 파일도 포함되어 있는지 알 수 없습니다. 예를 들어:

Pictures
.pip
.pki
.profile
projects
Public

나는 내가 원하는 것을 달성할 수 있다는 것을 알고 있지만, ls -ld .*설명할 수 없는 grep의 동작이 궁금할 뿐입니다.

답변1

매개변수를 따옴표 grep로 묶어서ls -a | grep '^\.'

그 이유는 쉘이 \.이를 처리하여 다시 일반으로 변환 .grep다음 단일 문자 와일드카드로 처리하기 때문입니다. 의심스러울 경우 항상 쉘 특정 문자를 포함하는(또는 포함할 수 있는) 문자열을 인용하십시오.

답변2

grep 정규 표현식을 따옴표로 묶어야 합니다.

ls -a | grep '^\.'

노트:ls명령의 출력을 구문 분석하지 않습니다..

답변3

cmd를 실행하면ls -a | grep ^\.그러면 grep은 "\"를 특수 문자로 처리하지 않으며 "."의 의미가 이스케이프되지 않습니다.

cmd를 사용할 때ls -a | grep "^\."그런 다음 grep은 "\"를 특수 문자로 처리하고 "."의 의미를 이스케이프합니다. 그것은 당신에게 예상되는 결과를 줄 것입니다.

따옴표 없이 grep cmd를 사용하려면 "\" 문자도 이스케이프해야 합니다. 다음 명령을 사용하면 큰따옴표 없이 예상된 결과를 얻을 수 있습니다. ls -a | grep ^\\.

정규식에서 특수 문자의 의미에 대한 자세한 내용은 다음 링크를 참조하세요. http://www.regular-expressions.info/quickstart.html

관련 정보