그래서 제가 하는 말이 있어요:
ID: 54376
"ID:" 없이 숫자만 반환하는 정규식을 만드는 데 도움을 주실 수 있나요?
노트:문자열이 파일에 있습니다.
답변1
이 시도:
grep -oP '(?<=ID: )[0-9]+' file
또는:
perl -nle 'print $1 if /ID:.*?(\d+)/' file
답변2
가지다많은그것을 수행하는 방법. 예를 들어:
가장 가까운 PCRE와 함께 GNU를 사용
grep
하고 다음 숫자를 일치시키십시오ID:
.grep -oP 'ID:\s*\K\d+' file
awk
다음으로 시작하는 모든 줄의 마지막 필드를 사용 하고 간단히 인쇄하십시오.ID:
awk '/^ID:/{print $NF}' file
숫자가 아닌 필드도 인쇄하지만 숫자만 가져오고 두 번째 필드에서만 사용하려면 다음을 사용하세요.
awk '($1=="ID:" && $2~/^[0-9]+$/){print $2}' file
확장 정규 표현식과 함께 GNU grep을 사용하고 두 번 구문 분석합니다.
grep -Eo '^ID: *[0-9]+' file | grep -o '[0-9]*'
답변3
일치하는 세그먼트만 얻으려면 egrep
with -o
또는 grep
with 옵션을 사용하세요 . 숫자를 얻으려면 정규 표현식을 -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/flags
s
"ID: "
""
p
산출:
1
4