ファイル内のいくつかの数値を、見つかった数値を使用した計算結果に置き換え、MacOSXでsedを使用したいと思います。私は多くのバリエーションを試しましたが、基本的な正規表現の代わりにモダンを使用するには-Eを使用する必要があることがわかりました。
いくつかの例:
echo "bla 18934750 + wwv_flow_id.offset bla" | sed s/\ +\ wwv_flow_id.offset/blabla/
与える
bla 18934750blabla bla
したがって、-Eがないと、固定テキストが検索されて置き換えられます。しかし、-Eを使用すると、次のことはできません。
echo "bla 18934750 + wwv_flow_id.offset bla" | sed -E s/\ +\ wwv_flow_id.offset/blabla/
与える
bla 18934750 + wwv_flow_id.offset bla
言い換えれば、テキストに一致や変更はありません。最終的な目標は、固定テキスト「+ wwv_flow_id.offset」の前にある番号を見つけ、その番号を使用して、そこから固定番号(たとえば、750)を引くことです。したがって、最終結果は次のようになります。
bla 18934000 + wwv_flow_id.offset bla
そのためには、少なくとも後方参照が必要ですが、これも期待どおりに機能しません。
echo "bla 18934750 + wwv_flow_id.offset bla" | sed -E s/\([0-9]+\)\ /\1/
与える
bla 1+ wwv_flow_id.offset bla
正規表現の第一人者がここで私を助けてくれることを願っています。
アップデート
ruakhの助けを借りて、これは私が今持っているものです:
echo "bla 18934750 + wwv_flow_id.offset bla" | sed -E 's/([0-9]+) \+ wwv_flow_id.offset/(\1-750) \+ wwv_flow_id.offset/'
これは次を返します:
bla (18934750-750) + wwv_flow_id.offset bla
今のボーナスの質問は、これをどのように変えるかです
bla 18934000 + wwv_flow_id.offset bla
更新2
次のように、sedとawkを組み合わせることで、目的の結果を達成することができました。
echo "bla 18934750 + wwv_flow_id.offset bla" | sed -E 's/([0-9]+)([ ]*)\+([ ]*)wwv_flow_id.offset/~\1~\2\+\3wwv_flow_id.offset/' | awk -F~ '{print $1 $2-750 $3}'
~
(元の行にトークンがないことは確かです)