영숫자 항목이 아닌 Grep 숫자만 사용

영숫자 항목이 아닌 Grep 숫자만 사용

다음과 같은 값 목록이 있습니다.

1
2
3
4
Ak123
Ak23
Ak147
1Apple
2Apricot
3Mango
4Orange

숫자만 나열하기 위해 간단한 grep 명령을 수행하고 싶습니다. 즉 1, 2, , 3입니다 4. 나는이 명령을 시도했습니다 -

grep -Ein --color '^\s*[0-9]' test.txt

그러나 영숫자도 반환합니다. 대신 다음 명령을 통해 문자를 생략해 보았습니다.

grep -Ein --color '^\s*[0-9][^A-Z]' test.txt

그러나 결과는 0입니다.

답변1

각 줄에는 공백 없이 단어 하나만 포함되어 있다고 가정합니다.

grep -x -E '[0-9]+'

또는

grep -x -E '[[:digit:]]+'

그러면 숫자만 포함된 행이 추출됩니다. 패턴이 전체 라인과 일치하도록 -x강제하는 옵션입니다. grep.-E+

패턴은 [[:digit:]]+최소한 하나의 숫자와 일치합니다. 일치하는 숫자 유형은 지역에 따라 다를 수 있습니다.

선행 및 후행 공백을 허용합니다.

grep -x -E '[[:blank:]]*[0-9]+[[:blank:]]*'

또는

grep -x -E '[[:blank:]]*[[:digit:]]+[[:blank:]]*'

이 패턴은 [[:blank:]]*0개 이상의 탭이나 공백과 일치합니다.


표현식은 ^\s*[0-9]공백 문자로 시작하고( \s공백 문자와 일치한다고 가정하면 실제로는 PCRE임) 숫자를 포함하는 줄과 일치합니다. 숫자 뒤에는 문자열과 같이 모든 문자가 나타날 수 있습니다 2Apricot.

귀하의 표현은 ^\s*[0-9][^A-Z]비슷하지만 [^A-Z]문자가 아닌 두 번째 대문자가 아닌 문자에 대한 일치를 시행합니다. 이는 , 및 와 같은 긴 문자열과 일치 33하지만 1a단일 5-문자열 과는 일치하지 않습니다 3.

답변2

또한 시도

$ grep -v '[^ 0-9]' file
1
2
3
4

답변3

사용

grep -Eo '[0-9]{1,3}' filename

-Eo의 숫자와 일치하는 숫자 데이터만 출력하며, 숫자의 []숫자는 {}grep하려는 숫자의 길이를 나타냅니다.

답변4

cat file | grep -v '[[:alpha:]]' | grep -o '[0-9]*'

관련 정보