두 개의 숫자만 포함하는 문자열을 Grep합니다.

두 개의 숫자만 포함하는 문자열을 Grep합니다.

문자열이 포함된 샘플 파일이 있습니다.

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

-xgrep 구현이 / 옵션을 제공하지 않는 경우 라인 앵커를 사용할 --line-regexp수 있습니다 .^$

$ grep '^[^0-9]*[0-9][^0-9]*[0-9][^0-9]*$' file
HABDDF61WE
HAADYF6WE2

아니면 awkex.

$ awk 'gsub(/[[:digit:]]/,"&") == 2' file
HABDDF61WE
HAADYF6WE2

( gsub교체 횟수를 반환합니다). Perl을 사용하여 비슷한 작업을 수행할 수 있습니다 tr.

답변2

awk -F '[0-9]' 'NF==3' file

숫자로 분할하면 3개의 필드가 있는 행은 2개의 숫자가 있는 행이 됩니다.

관련 정보