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