정규 표현식: 모든 대체 문자가 숫자인 경우

정규 표현식: 모든 대체 문자가 숫자인 경우

egrep문자도 숫자인 줄을 확인하는 Linux 명령을 작성하려고 합니다 .

나는 이렇게 한다:

egrep "^(.[0-9])*$" text.txt 

그러나 이 방법은 i) 빈 줄과 ii) 홀수 문자의 경우 실패합니다. 123유일한 홀수 위치는 실제로 숫자이기 때문에 일치해야 하지만 그렇지 않습니다.

유효한 모드:

a2b4c6
000000
123
a1b
a1b2c3q

잘못된 모드:

aaaa
0a0a0a
a1bq

내가 어떤 실수를 했는지 누가 말해줄 수 있나요?

편집: 유일한 제한은 각 대체 문자가 짝수여야 한다는 것입니다. 전체 줄의 길이는 짝수이거나 홀수일 수 있습니다. 위 명령은 짝수 길이만 허용합니다(예: 1234, a1b2c3 등). 그러나 123, a1b도 유효하지만 이는 일치하지 않습니다. 제 질문은 이 문제를 어떻게 처리할 것인가입니다.

답변1

정규식은 *"0 이상"을 의미하므로 빈 줄과 일치하므로 ^(.[0-9])*$빈 줄과 일치합니다. +("1개 이상 일치")를 사용하여 이 문제를 해결할 수 있습니다 .

다음 문제는 한 줄에 짝수 개의 문자가 있으면 일치하는 문자가 없다는 것입니다. 이를 방지하려면 grep끝에 0 또는 1개의 문자도 허용된다는 것을 알 수 있습니다 .

grep -E "^(.[0-9])+.?$" 

예를 들어:

$ cat file 
a2b4c6
000000


123
aaaa
0a0a0a

$ grep -E "^(.[0-9])+.?$" file
a2b4c6
000000
123

관련 정보