기본 정규식을 사용하여 더 나은 검색 및 시간 절약 방법
Grep을 사용하여 검색 중이거나 배치 파일 이름을 바꿀 수있는 프로그램을 보던간에 작업을 쉽게 수행 할 수있는 방법이 있는지 궁금해했을 것입니다. 고맙게도, 거기 있고, 그것은 "정규식"이라고 불립니다.
(XKCD.com의 만화)
정규 표현식이란 무엇입니까??
정규 표현식은 매우 구체적인 방식으로 형식화 된 구문이며 많은 다른 결과를 나타낼 수 있습니다. "regex"또는 "regexp"라고도 알려져 있으며 주로 검색 및 파일 명명 기능에 사용됩니다. 하나의 정규 표현식을 수식처럼 사용하여 여러 가지 가능한 출력을 만들 수 있습니다.이 모든 결과는 모두 검색됩니다. 또는 정규식을 지정하여 파일 그룹의 이름 지정 방법을 지정할 수 있으며 소프트웨어가 다음 의도 된 출력으로 점진적으로 이동할 수 있습니다. 이렇게하면 여러 폴더의 여러 파일을 매우 쉽고 효율적으로 이름을 바꿀 수 있으며 간단한 번호 매기기 시스템의 한계를 뛰어 넘을 수 있습니다.
정규 표현식의 사용은 특별한 구문에 의존하기 때문에, 프로그램은 그 구문을 읽고 파싱 할 수 있어야합니다. Windows와 OS X 용 배치 파일 이름 바꾸기 프로그램의 상당수는 크로스 플랫폼 검색 도구 GREP (Bash Scripting for Beginners Guide에서 다루었습니다)와 * Nix 용 Awk 명령 줄 도구뿐만 아니라 regexps도 지원합니다. 또한 많은 대체 파일 관리자, 실행기 및 검색 도구가이를 사용하며 Perl 및 Ruby와 같은 프로그래밍 언어에서 매우 중요한 위치를 차지합니다. .NET, Java, Python 및 C ++ 11과 같은 다른 개발 환경은 모두 정규 표현식을 사용하기위한 표준 라이브러리를 제공합니다. 상상할 수있는 것처럼, 프로그램에 넣은 코드의 양을 최소화하려고 할 때 정말 유용 할 수 있습니다.
이스케이프 문자주의 사항
예제를 보여주기 전에, 우리는 어떤 것을 지적하고자합니다. 우리는 bash 쉘과 grep 명령을 사용하여 정규 표현식을 적용하는 방법을 보여줄 것입니다. 문제는 때로는 grep에 전달되어야하는 특수 문자를 사용하기를 원하며, 쉘이 문자를 사용하기 때문에 bash 쉘이 해당 문자를 해석한다는 것입니다. 이러한 상황에서는 이러한 문자를 "이스케이프"해야합니다. 이 "이스케이프"문자는 regexps 내부에서 또한 발생하기 때문에 혼란 스러울 수 있습니다. 예를 들어 이것을 grep에 입력하려면 다음과 같이하십시오.
\<
우리는 그것을 다음과 같이 대체해야합니다.
\\\<
여기서 각각의 특수 문자는 백 슬래시 하나를 얻습니다. 또는 작은 따옴표를 사용할 수도 있습니다.
'\<'
작은 따옴표는 bash에게 내부의 내용을 해석하지 말 것을 지시합니다. 우리가 여러분을 위해 보여줄 수 있도록 이러한 단계를 수행해야하지만, 프로그램 (특히 GUI 기반 프로그램)은 이러한 추가 단계가 필요하지 않습니다. 일을 간단하고 간단하게 유지하기 위해 실제 정규 표현식이 인용 된 텍스트로 주어지며 명령 줄 스크린 샷에서 이스케이프 된 구문을 볼 수 있습니다.
확장 방법?
Regexps는 컴퓨터를 여러 옵션으로 확장 할 수 있도록 용어를 설명하는 매우 간결한 방법입니다. 다음 예제를 살펴 보겠습니다.
톰 [0123456789]
대괄호 [-]는 구문 분석 엔진에 내부에있는 문자가 무엇이든간에 일치하는 한 문자를 사용할 수 있음을 알려줍니다. 그 괄호 안의 것은 문자 세트라고 불립니다..
따라서 우리가 엄청나게 많은 목록을 가지고 있고이 정규식을 검색에 사용했다면 다음 용어가 일치 할 것입니다 :
- 남자 이름
- tom0
- 톰 1
- 톰 2
- 톰 3
등등. 그러나 다음 목록은 일치하지 않으므로 결과에 표시되지 않습니다.
- 토마토 ; 정규식은 "tom"뒤에 오는 문자를 고려하지 않습니다.
- 톰; 정규식은 대소 문자를 구분합니다.!
또한 문자가있는 한 모든 문자를 허용 할 마침표 (.)로 검색하도록 선택할 수 있습니다.
보시다시피,
.남자 이름
처음에는 "톰"만있는 용어는 가져 오지 않았습니다. "톰"이전의 공간은 문자로 간주되기 때문에 "그린 토마토"가 들어 왔지만 "tomF"와 같은 용어는 처음에는 문자가 없었기 때문에 무시되었습니다..
참고 : Grep의 기본 동작은 일부가 정규 표현식과 일치 할 때 전체 텍스트 줄을 반환하는 것입니다. 다른 프로그램에서는이 작업을 수행하지 않을 수 있으며 grep에서 '-o'플래그를 사용하여이 기능을 끌 수 있습니다.
다음과 같이 파이프 (|)를 사용하여 대체를 지정할 수도 있습니다.
speciali (s | z) e
이 두 가지를 찾을 수 있습니다 :
- 전문화하다
- 전문화하다
grep 명령을 사용할 때 우리는 특수 문자 (, |,)를 백 슬래시로 이스케이프 할뿐만 아니라 '-E'플래그를 사용하여 이것이 작동하도록하고 추악한 오류를 방지해야합니다.
위에서 언급했듯이, bash 쉘에게 grep에 이러한 문자를 전달하고 그들과 아무 것도하지 말 것을 요구하기 때문입니다. '-E'플래그는 grep에게 괄호와 파이프를 특수 문자로 사용하도록 지시합니다.
대괄호 안에 있고 집합의 시작 부분에있는 캐럿을 사용하여 제외로 검색 할 수 있습니다.
톰 [^ F | 0-9]
다시 grep과 bash를 사용한다면, 그 파이프에서 벗어나는 것을 잊지 마십시오.!
목록에 있지만 표시되지 않은 조건은 다음과 같습니다.
- tom0
- tom5
- tom9
- tomF
이들은 우리의 정규식과 일치하지 않았다..
환경을 어떻게 활용할 수 있습니까??
종종 경계를 기반으로 검색합니다. 때로는 단어 시작 부분, 단어 끝 또는 코드 줄 끝 부분에만 나타나는 문자열 만 원할 때가 있습니다. 이것은 앵커라고 부르는 것을 사용하여 쉽게 수행 할 수 있습니다..
괄호 밖의 캐럿을 사용하면 선의 "시작"을 지정할 수 있습니다..
^ 톰
줄 끝을 검색하려면 달러 기호를 사용하십시오..
톰 $
이 경우 앵커보다 검색 문자열이 먼저 나오는 것을 볼 수 있습니다..
전체 줄이 아닌 단어의 처음 또는 끝에 나타나는 일치 항목을 표시 할 수도 있습니다.
\
톰 \>
이 기사의 시작 부분에서 언급했듯이 bash를 사용하기 때문에 이러한 특수 문자를 이스케이프 처리해야합니다. 또는 작은 따옴표를 사용할 수도 있습니다.
결과는 같습니다. 큰 따옴표가 아닌 작은 따옴표를 사용해야합니다..
고급 Regexps에 대한 기타 리소스
우리는 여기서 빙산의 일각을 맞았습니다. 통화 표시로 표시된 돈 용어를 검색하고 3 개 이상의 일치하는 용어를 검색 할 수도 있습니다. 상황이 실제로 복잡해질 수 있습니다. 정규식에 대해 더 자세히 알고 싶다면 다음 소스를 살펴보십시오..
- Zytrax.com에는 몇 가지 이유가있는 이유와 일치하지 않는 구체적인 예가 나와 있습니다..
- Regular-Expressions.info에는 고급 자료가 많이 포함 된 유용한 정보뿐만 아니라 편리한 참조 페이지도 있습니다..
- Gnu.org에는 grep과 함께 regexps를 사용하는 페이지가 있습니다..
또한 RegExr이라는 무료 플래시 기반 온라인 도구를 사용하여 정규 표현식을 작성하고 테스트 할 수 있습니다. 입력 할 때 작동하며 무료이며 대부분의 브라우저에서 사용할 수 있습니다..
정규식을 가장 좋아하는 용도로 사용하고 있습니까? 그 (것)들을 이용하는 중대한 배치 renamer의 알고 있는가? 어쩌면 당신은 당신의 grep-fu에 대해 자랑하고 싶을지도 모릅니다. 댓글을 달아 자신의 생각에 공헌하십시오.!