私はファイルを実行して置換を行うためにsedスクリプトに取り組んでいます。既存のファイルには浮動小数点数のシーケンスがあり、文字が見つかるとシーケンスが終了します。置換のほとんどは次のようになります。前の行と一致するグループを取得する
rawコマンドを関数呼び出しで置き換えるだけです。
一部のコマンドは、前の行にある座標に依存するため、関数呼び出しと同等の1:1はありません。
move(1.068,7.399);
curveto(1.068,7.399,-11.794,13.153,-11.843,12.234);
前の行からの座標の最後のセットは、この行の座標の最初のセットとして使用する必要があります。この中へ
1.068 7.399 m
-11.794 13.153 -11.843 12.234 v
:
は、だから私は、これをオンにする必要があります。
-7.451 17.792 -10.366 16.42 -11.198 14.444 c
-11.794 13.153 -11.843 12.234 v
ニーズがこれになるために:
curveto(-7.451,17.792,-10.366,16.42,-11.198,14.444);
curveto(-11.198,14.444,-11.794,13.153,-11.843,12.234);
がここに分かれて作業していない私の試み(、だ。このように、前の行の座標は常に、同じトークンでは終わりませんこれは1ライナーです):
s/
.*(-?[0-9]*\.?[0-9]*) (-?[0-9]*\.?[0-9]*) [a-zA-Z]$^(-?[0-9]*\.?[0-9]*) (-?[0-9]*\.?[0-9]*) (-?[0-9]*\.?[0-9]*) (-?[0-9]*\.?[0-9]*) y/
curveto(\1,\2,\3,\4,\5,\6);/
g
これは正しい方法はありますか?あなたの問題のために
「sed」する必要がありますか? –
私はすでに 'sed'にコードを書いていますが、他のすべての置換えのためです。最終的にこれはbashスクリプトになるでしょう。ストリーム操作を行う必要があるので、Linux/Unixユーティリティはすべて公正なゲームです。何を思っていたんだ? – charmeleon
私は 'awk'を考えていました。私の考えでは、' sed'よりも複数行の要求をよりエレガントに扱います。 –