grep의 숫자 범위에서 단일 숫자만 일치시킵니다.

grep의 숫자 범위에서 단일 숫자만 일치시킵니다.

다음과 같은 파일이 있는 경우:

hostname1.domain.com
hostname2.domain.com
hostname3.domain.com
hostname23.domain.com
hostname1234.domain.com

어떻게 grep반품할 수 있나요?

hostname1.domain.com
hostname2.domain.com
hostname3.domain.com

이렇게 하면 숫자만 반환됩니다. 노력하고있어:

grep -E hostname[+1,+2,+3].domain.com

이 방법이 효과가 있는 것 같지만 더 좋은 방법이 있는지 궁금합니다.

답변1

하다:

grep 'hostname[0-9]\.domain\.com' infile

[0-9]0~9 사이의 단일 숫자를 일치시키려면 점을 문자 그대로 일치시키도록 점을 이스케이프해야 합니다 .. 그렇지 않으면 임의의 단일 문자(단 줄 바꿈)와 일치하고 와일드카드와 같은 특수 항목에 대한 쉘의 혼란을 피하기 위해 항상 패턴을 인용하는 것을 의미합니다. 중괄호 확장 또는 기타)에 대해 설명합니다.

호스트 이름 1, 2, 3으로만 제한하려면 다음을 수행할 수 있습니다.

grep 'hostname[123]\.domain\.com' infile

또는 동등하게:

grep 'hostname[1-3]\.domain\.com' infile

사용할 수도 있습니다 -x(전체 줄과 정확히 일치하는 일치 항목만 선택하거나 줄 ^시작 및 $끝 앵커로 묶음).

grep -x 'hostname[0-9]\.domain\.com' infile
grep  '^hostname[0-9]\.domain\.com$' infile

문자열을 정확하게 일치시키고 hostname23.domain.com다른 것은 없습니다.

grep -xF 'hostname23.domain.com' infile

바라보다사람들은 grep-F스위치와 여기에 탈출 지점이 없는 이유에 대해 설명합니다 .

관련 정보