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