정규식이 올바르게 작동하도록 grep을 얻을 수 없습니다.

정규식이 올바르게 작동하도록 grep을 얻을 수 없습니다.
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

이것이 출력이 아니어야합니까?

sarah saab marrrrrra

Windows 10에서 putty와 nxclient를 사용해 보았습니다.

답변1

csh을(를) 보고 *확장하려고 시도하는 을(를) 사용하고 있습니다.쉘 글로브그리고 실패합니다. 즉, csh여기서는 "일치 없음"이 아니라 입니다 grep. 같지 않은본 가족 껍질, csh확장할 수 없는 glob 패턴을 명령에 전달하지 않으므로 csh에 릴리스 하려면 이를 인용해야 합니다 grep.

당신이 시도하지 않기 때문에 여기에 작은 따옴표를 권장합니다보간하다문자열에 변수를 추가합니다.

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

패턴에 가 포함되어 있지 않기 때문에 이 경우 큰따옴표도 작동 $하지만 어쨌든 여기서는 작은따옴표를 사용하는 것이 좋습니다. 쉘, Perl 등과 같이 반교환적으로 사용할 수 있는 언어에서 어떤 인용문을 사용하는지 신중하게 고려하는 것은 습관화할 가치가 있습니다. 여기서는 문자열 보간이 필요하지 않으므로 인용 스타일을 사용하지 않기로 선택하겠습니다. 그게 가능합니다.

그런데 Bourne 계열 쉘에서도 RE 패턴을 인용해야 합니다. Mike Wagner가 위의 의견에서 암시했듯이 정규 표현식과 glob 패턴은동일한 특수 문자를 여러 개 사용, 때로는 RE 패턴을 작성할 수도 있습니다.발생일부 파일과도 일치하므로 예기치 않게 셸에 의해 확장됩니다.

관련 정보