대문자가 한 줄의 특정 패턴을 따르는지 확인하는 방법은 무엇입니까?

대문자가 한 줄의 특정 패턴을 따르는지 확인하는 방법은 무엇입니까?

일부 학생들에게 코딩 습관을 강요하고 있기 때문에 bash 스크립트를 사용하여 소스 파일을 읽고 줄 시작 부분에 "class" 패턴이 있는지 확인해야 합니다(들여쓰기가 발생할 수도 있고 발생하지 않을 수도 있음) 이전에 그 패턴으로) 라인에서). 패턴이 발견되면 다음 문자가 대문자인지 확인해야 합니다. 예를 들어:

    class Camel
    class camel

첫 번째 줄을 읽고 패턴을 찾은 class <space>다음 바로 다음 문자를 읽습니다 class <space>. 이는 테스트가 정상임을 나타내는 대문자 "C"입니다. 테스트의 두 번째 줄이 실패합니다. 기본적으로 bash 변수(예: test)는 테스트가 실패하면 FALSE로 설정되고 그렇지 않으면 TRUE로 설정됩니다. awk, sed또는을 사용하여 이 작업을 수행하려면 어떻게 해야 합니까 grep?

답변1

awk이는 언급한 세 가지 도구( , sed또는 grep) 중 하나에서나 정규식을 지원하는 다른 도구를 사용하여 똑같이 간단합니다. 원하는 패턴과 일치하는 정규식은 다음과 같습니다.

'^\s*class [A-Z]'

줄 시작 부분의 공백 수에 관계없이 문자열 class, 대문자 순으로 일치합니다. 다음 (부분) 명령에서 이를 사용하여 grep적용 할 수 있습니다.

grep -Pq '^\s*class [A-Z]'

테스트하려면 다음과 같이 시도해 볼 수 있습니다.

user@host:~$ \
if echo '    class Camel' | grep -Pq '\s*class [A-Z]'; then \
    echo TRUE; \
else \
    echo FALSE; \
fi

TRUE

user@host:~$ \
if echo '    class camel' | grep -Pq '\s*class [A-Z]'; then \
    echo TRUE; \
else \
    echo FALSE; \
fi

FALSE

결과를 변수에 저장하려면 TEST다음과 같이 할 수 있습니다.

if echo '    class camel' | grep -Pq '\s*class [A-Z]'; then \
    TEST=TRUE; \
else \
    TEST=FALSE; \
fi

답변2

파일의 내용을 읽으려면 cat 명령을 사용하여 파일을 표시한 다음 해당 출력을 다른 명령 입력으로 전송할 수 있습니다. 다음은 기본 요구 사항을 충족하는 간단한 정규식입니다.

cat hello | grep '^\s*class [A-Z]'

설명하다:

'cat hello'

그러면 파일의 내용이 표시됩니다.

'|'

이것을 파이프라인이라고 합니다. 첫 번째 명령의 출력을 다음 명령의 입력으로 지정합니다.

'grep'

grep 명령은 패턴 일치에 사용됩니다.

'^\s*class [A-Z]'

위 줄에서는 단어 카테고리 다음에 대문자를 일치시켜야 한다고 설명합니다. 이를 패턴 일치라고 합니다.

정규식을 배우기에 좋은 자료입니다. 정규식

감사해요.

관련 정보