일부 학생들에게 코딩 습관을 강요하고 있기 때문에 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]'
위 줄에서는 단어 카테고리 다음에 대문자를 일치시켜야 한다고 설명합니다. 이를 패턴 일치라고 합니다.
정규식을 배우기에 좋은 자료입니다. 정규식
감사해요.