grep에서 숫자 만 가져 오려면 어떻게합니까?


56

나는 이런 파일을 가지고있다 :

 other lines . . .    
 blah blah blah (:34)

위의 파일에서 숫자의 발생을 찾고 싶습니다. 나는 생각해 냈다 :

grep [0-9] filename

그러나 그것은 전체를 인쇄하고 있습니다 :

blah blah blah (:34)

오히려 나는 단지 원한다 34. 그렇게 할 방법이 있습니까?


나중에 grep (또는 다른 프로그램)에 대한 매뉴얼 페이지도 확인하십시오. 매뉴얼 페이지에는 프로그램의 많은 일반적인 사용에 필요한 옵션이 자세히 설명되어 있습니다. 예man grep
hnasarat

이것을 시도해 볼 수 있습니다> grep -o '[0-9] [0-9] *'testfile

답변:


74

grep -E확장 정규 표현식 구문에 액세스하는 데 사용할 수 있습니다 ( egrep 와 동일 )

아래 내용으로 테스트 파일을 만들었습니다.

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)

이제 당신이 사용할 수있는 텍스트에서 숫자를 grep하기 위해

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

출력됩니다.

여기서 "-o" 는 줄의 전체 내용이 아니라 줄의 일치하는 세그먼트 만 출력하는 데 사용됩니다.

구불 구불 한 괄호 (예 : {및})는 일치하는 인스턴스 수를 나타냅니다. {1,4}는 이전 문자 또는 문자 클래스가 최소한 한 번, 그러나 네 번 이상 발생하지 않아야합니다.

도움이 되었기를 바랍니다


3
좋은. 또한 4 자리 이상의 숫자 나 임의의 숫자를 일치 시키려면 grep -Eo '[0-9]{1,}' testfile
FractalSpace

8

POSIX 표준[:digit:] 의 섹션 9.3.5에 지정된 RE 대괄호 표현식 을 플래그 와 함께 사용하여 일치하는 "단어"만 인쇄 할 수 있습니다.-o

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123

5

grep -o줄의 일치하는 부분 만 인쇄합니다. 그렇지 않으면 grep은 패턴이있는 선을 인쇄합니다.


1

curl을 사용하여 로컬 또는 원격으로 파일에 액세스 한 다음 줄 바꿈 (:)으로 줄을 그립니다. 그런 다음 잘라 내고 파일에 씁니다.

허용 된 대답은 파일의 이전 줄에 숫자가있을 수 있다는 것을 무시하고 예제 데이터에서 작동하지만 파일이 원격이라면 어떻게됩니까?

노동 조합 지부

curl file:///home/$USER/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

이 예 output.txt에서는 현재 폴더의 내용을 덮어 쓰고 input.txt공용 폴더에서 액세스 하고 있습니다.

curl https://yoursite.com/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

이 예 output.txt에서는 현재 폴더의 내용을 덮어 쓰고 input.txt에서 액세스 하고 https://yoursite.com/Public/있습니다.


1
curl단순 cat할 때 왜 사용 하는가?
PerlDuck

이 질문은 파일이 로컬임을 명확하게 나타내지 않습니다. 이 답변은 둘 다 가능합니다.
Stef
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.