2つの文字列パターン間の数値抽出

2つの文字列パターン間の数値抽出

各行に「年齢=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

関連情報