
私はMathematicaで長すぎるため、読みにくい長い方程式を取り、Cに入れます。 Mathematicaは,80個の文字行ブロックによく合うように削除したい多くの改行文字を挿入します.
たとえば、
(sin(T)*(16*pow(a,2)*M*cos(T)*pow(r,5)*
pow(Th_d,2) -
8*pow(a,2)*cos(T)*pow(r,6)*pow(Th_d,2) +
M*pow(r,3)*(-((3*pow(a,2)*pow(Ee,2) - 8*pow(Jz,2) -
4*pow(a,2)*pow(Ee,2)*cos(2*T) +
pow(a,2)*pow(Ee,2)*cos(4*T))*Cot(T)*pow(csc(T),3))/
2. + 32*pow(a,4)*pow(cos(T),3)*pow(Th_d,2)) -
2*(pow(a,4)*pow(Jz,2)*cos(T)*pow(Cot(T),4) +
4*pow(a,6)*pow(cos(T),5)*pow(r_d,2) +
4*pow(a,8)*pow(cos(T),5)*pow(Th_d,2)) -
2*pow(r,4)*(pow(Jz,2)*Cot(T)*pow(csc(T),3) +
4*pow(a,2)*cos(T)*pow(r_d,2) +
2*pow(a,4)*(5*cos(T) + cos(3*T))*pow(Th_d,2))\
+ (pow(a,2)*M*Cot(T)*pow(csc(T),3)*r*
(4*(pow(a,2)*pow(Ee,2) - 2*a*Ee*Jz + 2*pow(Jz,2))*cos(2*T) -
a*Ee*(a*Ee - 2*Jz)*(3 + cos(4*T)) +
2*pow(a,4)*pow(sin(2*T),4)*pow(Th_d,2)))/2. +
pow(r,2)*(-16*pow(a,4)*pow(cos(T),3)*
pow(r_d,2) -
4*pow(a,2)*pow(Cot(T),3)*csc(T)*
(pow(Jz,2) + pow(a,4)*(5 + cos(2*T))*pow(sin(T),4)*
pow(Th_d,2)))))/
(4.*pow(pow(a,2)*pow(cos(T),2) + pow(r,2),2)*
(pow(a,2) - 2*M*r + pow(r,2)))
なります
(sin(T)*(16*pow(a,2)*M*cos(T)*pow(r,5)*pow(Th_d,2) - 8*pow(a,2)*cos(T)*
pow(r,6)*pow(Th_d,2) + M*pow(r,3)*(-((3*pow(a,2)*pow(Ee,2) - 8*pow(Jz,2) -
4*pow(a,2)*pow(Ee,2)*cos(2*T) + pow(a,2)*pow(Ee,2)*cos(4*T))*Cot(T)*pow(csc(T),3))/
2. + 32*pow(a,4)*pow(cos(T),3)*pow(Th_d,2)) - 2*(pow(a,4)*pow(Jz,2)*cos(T)*
pow(Cot(T),4) + 4*pow(a,6)*pow(cos(T),5)*pow(r_d,2) + 4*pow(a,8)*pow(cos(T),5)*
pow(Th_d,2)) - 2*pow(r,4)*(pow(Jz,2)*Cot(T)*pow(csc(T),3) + 4*pow(a,2)*cos(T)*
pow(r_d,2) + 2*pow(a,4)*(5*cos(T) + cos(3*T))*pow(Th_d,2)) + (pow(a,2)*M*Cot(T)*
pow(csc(T),3)*r*(4*(pow(a,2)*pow(Ee,2) - 2*a*Ee*Jz + 2*pow(Jz,2))*cos(2*T) -
a*Ee*(a*Ee - 2*Jz)*(3 + cos(4*T)) + 2*pow(a,4)*pow(sin(2*T),4)*pow(Th_d,2)))/2. +
pow(r,2)*(-16*pow(a,4)*pow(cos(T),3)*pow(r_d,2) - 4*pow(a,2)*pow(Cot(T),3)*csc(T)*
(pow(Jz,2) + pow(a,4)*(5 + cos(2*T))*pow(sin(T),4)*pow(Th_d,2)))))/(4.*pow(pow(a,2)*
pow(cos(T),2) + pow(r,2),2)*(pow(a,2) - 2*M*r + pow(r,2)));
最も重要ではありませんが、コードの長さを短縮し、大容量ファイルの操作に適しています。
答え1
それでsed
あなたはできます
sed -E 'N;s/(.*)(\n) */\2\1/;/.{81}/s_^(.)(.{,79}[-+/*]) *_\2\1_;/^\n/!P;D' filename
-E
拡張正規表現を使用して読みやすくするN
バッファに次の行を追加するs/(.*)(\n) */\2\1/
行を連結し、改行を最初に移動し、インデントされたスペースを削除します。/.{81}/
80文字を超える行に有効です。その場合は、s_^(.)(.{,79}[-+/*]) *_\2\1_
改行文字を最後の記号に移動してください。/^\n/!P
バッファの最初の行が空でない場合は印刷します。D
残りのバッファから始めましょう
mosvyが指摘したように、このスクリプトは行の末尾のバックスラッシュに問題があるため、これを使用する必要があります。s/\\$//
また、長い入力行がある場合(OPの問題ではありませんが、将来の読者のための問題かもしれません)。完全なスクリプトは次のとおりです。N
/.{80}/!N
sed -E 's/\\$//;/.{80}/!N;s/(.*)(\n) */\2\1/;/.{81}/s_^(.)(.{,79}[-+/*]) *_\2\1_;/^\n/!P;D' filename