정규식을 사용하여 다음과 같은 유형 특성을 가진 패턴을 표현하고 싶습니다.
1) 숫자 값의 연속적인 시퀀스로 구성됩니다. 시퀀스의 길이는 1 이상입니다.
2) 위 순서의 첫 번째 숫자 값 앞이나 위 순서의 마지막 숫자 값 뒤, 또는 앞뒤에 숫자가 아닌 문자가 하나 이상 있습니다. 따라서 정규식은 다음 예와 일치해야 합니다.
A123
A123B
#A123BNNN
.123
-123+
반면에 AB123B123
두 개의 숫자 값의 시퀀스가 있으므로 위 패턴의 범위를 벗어납니다. 이 질문에서는 이 시나리오를 고려할 필요가 없습니다. 내가 이것을 분명히 밝혔기를 바랍니다.
답변1
이것은 당신이 원하는 것을 수행하는 것 같습니다 grep
:
$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt
추가 줄을 추가하면 data.txt
이것이 원하는 대로 작동함을 나타내는 것 같습니다.
예
$ cat data.txt
&320
*10-
AB123-
1234
ABCDEF
a20d34
12a12
32q5858j
' 2323 '
234aaa
#A123BNNN
.123
-123+
실행 예시:
$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt
&320
*10-
AB123-
' 2323 '
234aaa
#A123BNNN
.123
-123+
grep
스위치 에 익숙하지 않은 경우 -P
아래 리소스를 참조하세요. 이 스위치를 사용하면 grep
Perl에서 사용할 수 있는 대부분의 정규식 엔진을 사용할 수 있습니다.
인용하다
답변2
귀하의 설명은 숫자가 아닌 숫자 뒤에 오는 숫자 또는 숫자 뒤에 숫자가 아닌 숫자로 요약되는 것 같습니다.
grep -e '[^0-9][0-9]' -e '[0-9][^0-9]'
답변3
sed '
/^[^0-9]\+[0-9]/b # at least non-digit either before the first digit
/[0-9][^0-9]\+$/b # or after the last digit
d
'
(편집: 숫자가 없는 경우를 처리할 필요가 없습니다. 문제 설명에서는 이미 이를 배제합니다.