각 줄에 "나이=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
, r
및 s
적어도 한 번.
또한 대신뒤를 봐주장, 나는 사용할 것이다피하다. 좋은 점은 길이를 가변할 수 있어 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