egrep 및 정규식 사용

egrep 및 정규식 사용

다음과 같은 텍스트 파일이 있다고 가정해 보겠습니다 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:]]*$'

관련 정보