텍스트 파일이 있습니다. 객관식 시험입니다. 수백 개의 질문이 있으며 각 질문에는 ABCD로 시작하여 한 줄에 하나씩 4개의 답변 선택이 있습니다.
각 A.(및 B. 등) 뒤에는 공백이 오고 바로 뒤에는 질문 텍스트의 첫 번째 문자가 와야 합니다. 이와 같이:
++++++++++++++++++++++++++++++++
This is my question text?
A. Choice 1
B. Choice 2
C. Choice 3
D. Choice 4
++++++++++++++++++++++++++++++++
답 선택의 첫 번째 문자 앞에 단일 공백(다른 문자 또는 두 개 이상의 공백)이 아닌 다른 문자가 있는 A.로 시작하는 모든 줄을 찾고 싶습니다. 그런 다음 BC와 D에도 동일한 작업을 수행합니다.
/편집하다
"OK" 줄과 "Not OK" 줄을 구별하고 싶습니다.
A.<space><any char not a space> is OK.
예를 들어
A.ABC not OK.
A.123 not OK.
A. ABC not OK
A. 123 OK.
A. ABC OK.
"비정상적인" 행을 모두 찾고 싶습니다.
/편집 끝
답변1
grep -E '^[ABCD]\.([^ ]| )' file
A.
이렇게 하면 파일에서 로 시작 하거나 B.
뒤에 공백이 아닌 문자 또는 두 개의 공백이 오는 C.
모든 줄이 추출됩니다 .D.
표현식은 확장된 정규 표현식(AND 교대로 인해 |
)이므로 -E
with 를 사용합니다 grep
.
답변2
PCRE(Perl Compatible Regular Expressions)를 지원하는 경우 grep
다음을 수행할 수 있습니다.부정적인 예측단일 공백 뒤에 공백이 아닌 문자가 오는 경우:
grep -P '^A\.(?! \S)' file
또는 A,B,C,D 4개 모두에 대한 검색을 결합하려는 경우
grep -P '^[A-D]\.(?! \S)' file
답변3
sed -e '/^[A-D][.][ ][^ ]/d' input-file.txt
이렇게 하면 모든 정상 행이 제거되고 비정상적인 행만 남게 되며 sed는 stdout으로 인쇄합니다.
TAB 문자를 공백으로 처리하지 않는다고 가정합니다.