더북(TheBook)
Q ‘*’가 무엇인가요?

A 임의의 문자를 대체하는 메타문자입니다. 파일들을 Weapon 디렉터리로 파일을 이동해야 하는 상황을 가정해봅시다.

shinjaehun@losttemple:~$ ls
q3_Gauntle q3_Machine_Gun q3_Shotgun q3_Grenade_Launcher q3_Rocket_Launcher
q3_Rail_Gun q3_Plasma_Gun q3_Lighting_Gun q3_Flame_Thrower q3_BFG Weapon

파일을 하나씩 삭제하려면 10번의 노력이 필요합니다. 물론 시간과 노력을 들이면 되는 일이지만 더 편리한 방법을 알아두는 것이 좋겠죠? 위의 경우 모든 파일이 ‘q3_’로 시작하기 때문에 모든 문자를 대체하는 메타문자 ‘*’를 써서 다음과 같이 명령 한 번에 파일을 옮길 수 있습니다.

shinjaehun@losttemple:~$ mv q3_* Weapon

‘*’가 모든 문자를 대체하는 반면, 메타문자 ‘?’는 정확히 한 개의 문자만 대체합니다. a*b는 a로 시작하여 b로 끝나는 모든 이름을 대체하지만, a?b는 a로 시작하고 중간에 임의의 문자 하나가 있으며 b로 끝나는 파일을 의미합니다. 다음 명령의 결과를 살펴봅시다. a*b는 aandb와 anb 둘 다 검색해 내지만 a?b는 aandb는 검색하지 않고 anb만 검색할 것입니다.

shinjaehun@losttemple:~$ find -name a*b
shinjaehun@losttemple:~$ find -name a?b

[]는 괄호 안에 있는 문자를 대체합니다. [A,B,C]_number는 A나 B, 또는 C로 시작되고 ‘_number’로 끝나는 파일명 A_number와 B_number, C_number를 검색할 것입니다.

shinjaehun@losttemple:~$ find -name [A,B,C]_number

[]는 -를 이용해서 대체할 영문자나 숫자의 범위를 지정할 수 있습니다. 이를테면 number[0-9]는 number로 시작해서 0부터 9까지의 숫자가 붙는 문자, number0, number1, ... number9까지를 검색할 수 있습니다. 같은 원리로 문자에 적용해 본다면 [A-C]number는 [A,B,C]_number 같이 사용할 수 있습니다.

shinjaehun@losttemple:~$ find -name number[0-9]
shinjaehun@losttemple:~$ find -name [A-C]_number

이때 주의할 것은 [] 안에 범위를 지정할 때(모든 영문자라는 의미에서) a-Z까지 대소문자를 섞어 쓴다거나 숫자와 영문자를 섞어 범위를 지정할 수 없다는 점입니다. [] 안에는 동일한 성질의 문자 범위만 지정할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.