간단한 Re로 OR을 표현하는 것에 대한 질문입니다.

aeronova의 이미지

안녕하세요,

bash shell에서 re를 이용해서 OR(|)을 사용하려고 했으나, 생각처럼 되지 않았습니다. 제가 하려고 했던것은 확장자가 eps나 pdf인 파일을 이동시키는 것이었습니다. 그래서 다음처럼

mv *.(eps|pdf) ../figures

하니까 에러가 나더군요. 아무래도 |을 사용하는데 문제가 있는듯 합니다. 음.. 어떻게 해야 확장자가 eps나 pdf인 파일을 옮길수 있을까요? 조언부탁드립니다. :)

서지훈의 이미지

\ 를 붙여 보세요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

익명 사용자의 이미지

mv *.{eps,pdf} ../figures

로 하면 안될까요?

AAAAA{aaa,bbb} 는

AAAAAaaa AAAAAbbb 로 해석됩니다.

엄밀히 OR 은 아닙니다.

cinsk의 이미지

Shell에서 쓸 수 있는 것은 filename expansion이지, regular expression이 아닙니다. 즉, *, ?, [...]를 지원합니다.

cinsk의 이미지

덧붙여서, 좀 더 자세히 설명하면 "*.(eps|pdf)"는 filename expansion이든, regular expression이든 올바른 표현이 아닙니다.

먼저 앞서 말한 대로 (, |, )는 filename expansion wildcard에 없는 문자입니다. 따라서 제대로 인식할 수 없습니다.

둘째, regular expression으로 표현할 경우, 올바른 expression은 ".*\.(eps\|pdf\)"입니다.

게다가 bash 자체에서 ( ... )는 subprocess를 만드는 명령이고, |는 파이프 명령이기 때문에, bash가 이를 해석하지 않도록 주의해야 합니다.