문자열이 포함된 샘플 파일이 있습니다.
GABCDF64V3
HABDDF61WE
KABSDF6WER
HAADYF6WE2
문자열에 두 개의 숫자 값(문자열의 어느 위치에든)만 포함하면 됩니다. 즉, 출력은 다음과 같아야 합니다.HABDDF61WE그리고하디 F6WE2오직.
이런 표현을 써봤습니다
grep -E '.*[0-9]{1,}.*[0-9]{1,}.*'
하지만 출력은 다릅니다
답변1
grep에서 이 작업을 수행하려면 다음이 필요합니다.전반적으로0개 이상의 숫자가 아닌 숫자, 숫자, 0개 이상의 숫자가 아닌 숫자, 마지막으로 숫자가 아닌 0개 이상의 숫자로 구성됩니다. 예를 들어
$ grep -x '[^0-9]*[0-9][^0-9]*[0-9][^0-9]*' file
HABDDF61WE
HAADYF6WE2
(라틴 십진수만 해당) 또는
$ grep -Px '\D*\d\D*\d\D*' file
HABDDF61WE
HAADYF6WE2
-x
grep 구현이 / 옵션을 제공하지 않는 경우 라인 앵커를 사용할 --line-regexp
수 있습니다 .^
$
$ grep '^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*$' file
HABDDF61WE
HAADYF6WE2
아니면 awk
ex.
$ awk 'gsub(/[[:digit:]]/,"&") == 2' file
HABDDF61WE
HAADYF6WE2
( gsub
교체 횟수를 반환합니다). Perl을 사용하여 비슷한 작업을 수행할 수 있습니다 tr
.
답변2
awk -F '[0-9]' 'NF==3' file
숫자로 분할하면 3개의 필드가 있는 행은 2개의 숫자가 있는 행이 됩니다.