2013-03-11 2 views
27

(확장 정규 표현식)ls과 같이 사용하려고 시도했습니다. ls .+\..+입니다.정규 표현식 사용 ls

확장자가 인 모든 파일을 인쇄하려고합니다 (ls *.*을 사용할 수 있었지만 ER을 사용하려고했습니다).

이 코드를 실행하면이 오류가 발생합니다 : ls: .+..+: No such file or directory.

+5

당신이 혼란 된 RE와 쉘 와일드 카드를 것 같아요 : 배쉬의

최신 버전은 정규 표현식 연산자, =~을해야합니까. 대답은 또한 그녀가 사용하고있는 것에 달려 있습니다. – Madbreaks

+1

그래서 ls에서 RE를 사용할 수 없습니까? –

+2

ls를위한 비표준 스크립트를 사용하지 않는 한, 정규식을 사용하지 않습니다. 또한 os는 *와 같은 특수 와일드 카드 문자를 처리하여 명령에 전달합니다. 대신 '찾기'를 사용해보십시오 – GetSet

답변

57

정규 표현식을 shell globbing과 혼동하고 있습니다. *

$ ls | egrep '.+\..+' 
+1

알았어요. 그래서, 우선 무엇을 사용하려고하는지 RE를 받아 들여야하는지 확인해야합니다. –

+2

패턴을 'globbing'과 일치시킬 수없는 경우에는 대체 방법을 사용해야합니다. * F.Y.I *'find '도구는 정규 표현식 매칭을 지원합니다. –

3

당신은 당신이 사용하는 쉘 무슨 말을하지 않지만, 일반적인가 있지만 그들은 일반적으로, 그런 식으로 정규 표현식을 지원하지 않습니다 : 당신은 파일 이름과 일치하는 정규 표현식을 사용하려면 당신은 할 수 nix CLI 도구 (grep, sed 등)가 있습니다.

bash do와 같은 셸은 유사한 문자 (예 : *)를 사용하지만 같은 것은 아니지만 globbing입니다.

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
     echo $x; 
    fi; 
done 
+1

쿨! 나는 그것에 대해 들어 본 적이 없다! :) 그래서'= ~'만 사용하면 통역사는 내가 일치하려고하는 것이 RE인지 이해하게 될 것입니다. –

+3

* test *의 컨텍스트에서 사용해야합니다. 이중 대괄호를 사용하므로이 특정 사례의 경우 (e) grep을 통한 파이프 작업은 훨씬 간단합니다. 그러나 그것에 대해 알면 유용합니다. – delicateLatticeworkFever

+1

도움을 많이 주셔서 감사합니다! 나는이 팁을 기억할 것이다! ;) –