두 문자열 패턴 사이의 숫자 추출

두 문자열 패턴 사이의 숫자 추출

각 줄에 "나이=22세, 키=6피트" 유형의 식이 포함된 파일이 있는데 나이와 키 숫자만 추출하고 싶습니다.

나는 열심히 노력했다

grep -oP  '(?<=Age=)[^years]+' $f | awk '{ printf "%d \n",$1; }

그리고 나이를 정확하게 알아내세요. 나이와 키를 동시에 알 수 있는 방법이 있나요? 중첩된 패턴 일치를 시도하면 높이만 얻습니다.

제가 시도한 패턴은 이렇습니다

grep -oP  '(?<=Age=)[^years]+.+(?<=Height=)[^feet]+' $f | awk '{ printf "%d \n",$1; }

답변1

이것은 여러분이 생각하는 대로 작동하지 않으며 단지 우연히 작동합니다.

[^years]+

의미, 일치모든 문자와는 별개로 y, e, a, rs적어도 한 번.

또한 대신뒤를 봐주장, 나는 사용할 것이다피하다. 좋은 점은 길이를 가변할 수 있어 Age및 를 쉽게 일치시킬 수 있다는 것입니다 Height.

(Age|Height)=\K

그런 다음 부정 일치를 수행하는 대신 숫자만 일치하는 긍정 일치를 사용합니다.

grep -Po '(Age|Height)=\K\d+'

--

$ echo "Age=22 and Height=6" | grep -Po '(Age|Height)=\K\d+'
22
6

답변2

$ echo 'Age=22 years and Height=6 feet' | awk -F'[= ]' '{print $2, $6}'
22 6

답변3

다음 표현식 유형의 파일이 있습니다.각 라인"나이=22, 키=6피트"

sed이 옵션을 사용하면 됩니다 -E.

sed -E 's/[^[:digit:]]+/ /g;s/^ //' <<< "Age=22 years and Height=6 feet"

sed아니면 그것을 가리키는 파일 이라면 .

sed -E 's/[^[:digit:]]+/ /g;s/^ //' file.txt

둘 다 추가나이그리고높은패턴에.

sed -E 's/^Age=([[:digit:]][^ ]*).*Height=([[:digit:]][^ ]*).*/\1 \2/' file.txt

관련 정보