다음과 같은 값 목록이 있습니다.
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]*'