다음과 같은 텍스트 파일이 있다고 가정해 보겠습니다 inputFile
.
hello
HELLO
Hello World
wOrld
asdgfsafd
abc 123
1 3 5 a b
egrep과 정규식을 사용하여 문자 앞이나 뒤에 공백이 있는지 여부에 관계없이 단 하나의 단어(대문자/소문자로 구성된 시퀀스)만 포함하는 줄을 인쇄하고 싶습니다.
따라서 출력은 다음과 같아야 합니다.
hello
HELLO
wOrld
asdgfsafd
내가 생각해낸 최고의 정규식은 다음과 같습니다.
egrep ' *[a-zA-Z] *$' inputFile
하지만 작동하지 않는 것 같습니다. 어떤 제안이 있으십니까?
답변1
정규식이 단지 하나의 문자가 아닌 하나 이상의 문자와 일치하도록 +
그 뒤에 하나를 추가 해야 합니다 . [A-Za-z]
또한 정규식의 시작 부분을 a로 고정해야 합니다 ( 줄 끝과 일치하는 것이 아니라 ^
줄 시작 부분과 일치함 ).$
egrep '^ *[a-zA-Z]+ *$' inputFile
탭과 공백과 일치하도록 [[:space:]]*
대신 사용하고 싶을 수도 있습니다 . AZ뿐만 아니라 해당 영역의 모든 알파벳 문자 *
와 일치합니다.[[:alpha:]]
egrep '^[[:space:]]*[[:alpha:]]+[[:space:]]*$' inputFile
답변2
당신은 이미 좋은 출발을 하고 있습니다. 같은 줄(앞이나 뒤)에 공백이 아닌 다른 문자가 없는 하나 이상의 문자 시퀀스를 찾고 있습니다. 사용+
표기법을 사용하면 CAS가 말했듯이 하나 이상의 문자로 구성된 문자열을 표현할 수 있습니다 [a-zA-Z]+
.
시퀀스에서 앵커 검색을 수행하여 나머지 요구 사항을 충족할 수 있습니다(줄의 시작과 끝에 고정되어 전체 줄을 확인합니다). 같은 줄(앞 또는 뒤에 공백이 아닌 문자가 없음) 이후) (비어 있을 수도 있음) 공백, 그 뒤에 비어 있지 않은 문자 시퀀스, 그리고 또 다른 공백 시퀀스(비어 있을 수 있음)가 이어집니다.
egrep '^ *[a-zA-Z]+ *$'
표준 라틴 알파벳 이외의 문자(예: à
, é
및 ) ï
를 포함 ô
하고 공백 이외의 공백 문자(예: 탭)를 허용하려면 문자 클래스 코드를 사용하십시오.
egrep '^[[:space:]]*[[:alpha:]]+[[:space:]]*$'