특정 문자열 뒤의 숫자를 찾는 정규식

특정 문자열 뒤의 숫자를 찾는 정규식

그래서 제가 하는 말이 있어요:

ID: 54376

"ID:" 없이 숫자만 반환하는 정규식을 만드는 데 도움을 주실 수 있나요?

노트:문자열이 파일에 있습니다.

답변1

이 시도:

grep -oP '(?<=ID: )[0-9]+' file

또는:

perl -nle 'print $1 if /ID:.*?(\d+)/' file

답변2

가지다많은그것을 수행하는 방법. 예를 들어:

  1. 가장 가까운 PCRE와 함께 GNU를 사용 grep하고 다음 숫자를 일치시키십시오 ID:.

    grep -oP 'ID:\s*\K\d+' file
    
  2. awk다음으로 시작하는 모든 줄의 마지막 필드를 사용 하고 간단히 인쇄하십시오.ID:

    awk '/^ID:/{print $NF}' file
    

    숫자가 아닌 필드도 인쇄하지만 숫자만 가져오고 두 번째 필드에서만 사용하려면 다음을 사용하세요.

    awk '($1=="ID:" && $2~/^[0-9]+$/){print $2}' file
    
  3. 확장 정규 표현식과 함께 GNU grep을 사용하고 두 번 구문 분석합니다.

    grep -Eo '^ID: *[0-9]+' file | grep -o '[0-9]*'
    

답변3

일치하는 세그먼트만 얻으려면 egrepwith -o또는 grepwith 옵션을 사용하세요 . 숫자를 얻으려면 정규 표현식을 -Eo사용하세요 :[0-9]

grep -Eo [0-9]+ filename

답변4

sed를 사용하세요:

{
    echo "ID: 1"
    echo "Line doesn't start with ID: "
    echo "ID: Non-numbers"
    echo "ID: 4"
} | sed -n '/^ID: [0-9][0-9]*$/s/ID: //p'

-n"기본적으로 아무것도 인쇄하지 않음", " /^ID: [0-9][0-9]*$/이 정규식과 일치하는 줄"("ID:"로 시작하고 1개 이상의 숫자, 그 다음 줄의 끝)은 다음 과 같은 s/ID: //p형식 입니다. 대체를 수행하려면 패턴 (빈 문자열) 을 대체 텍스트로 바꾸십시오 . 이는 "대체 후 이 줄을 인쇄하십시오"를 의미합니다.s/pattern/repl/flagss"ID: """p

산출:

1
4

관련 정보