2016-08-14 11 views
0

私は、次のファイルがあります:テキスト処理(改行)

cat file1.m 

(4 (5 y^7 (-1 + 4 z) + y^6 (15 - 83 z + 80 z^2) - 
    5 z^4 (-2 + 4 z - 3 z^2 + z^3) + y^5 (-20 + 147 z - 273 z^2 + 140 z^3) + 
    y z^3 (40 - 154 z + 147 z^2 - 83 z^3 + 20 z^4) + 
    y^2 z^2 (60 - 254 z + 363 z^2 - 273 z^3 + 80 z^4) + 
    y^3 z (40 - 254 z + 462 z^2 - 439 z^3 + 140 z^4) + 
    y^4 (10 - 154 z + 363 z^2 - 439 z^3 + 160 z^4)) - 
9 (y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^3 + y^3 (-1 + 4 z) + 
    y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, y) - 
9 (y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^3 + y^3 (-1 + 4 z) + 
    y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, z) + 
36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) + 
    z^2 (6 - 5 z + 3 z^2)) H(1, z) + 
36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) + 
    z^2 (6 - 5 z + 3 z^2)) H(2, y))/(216 y z (-1 + y + z) (y + z)^4) 

を言う私はすべて先頭のスペースが削除されているように、このファイルを書き換えたいとも私は(いくつかの列の後に強制したいです列80)を使用して行を分割します。 は、これまでのところ、最初の問題は

sed -e 's/^[ \t]*//' file1.m > file2.m 

を使用して解決している。しかし、いくつかの列の後に改行する方法?

$ sed 's/^[ \t]*//' a.m | tr -d '\n' | fold -w80 
(4 (5 y^7 (-1 + 4 z) + y^6 (15 - 83 z + 80 z^2) -5 z^4 (-2 + 4 z - 3 z^2 + z^3) 
+ y^5 (-20 + 147 z - 273 z^2 + 140 z^3) +y z^3 (40 - 154 z + 147 z^2 - 83 z^3 + 
20 z^4) +y^2 z^2 (60 - 254 z + 363 z^2 - 273 z^3 + 80 z^4) +y^3 z (40 - 254 z + 
462 z^2 - 439 z^3 + 140 z^4) +y^4 (10 - 154 z + 363 z^2 - 439 z^3 + 160 z^4)) -9 
(y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^3 + y^3 (-1 + 4 z) +y (-4 + 12 z 
- 9 z^2 + 4 z^3)) H(0, y) -9 (y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^3 + 
y^3 (-1 + 4 z) +y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, z) +36 y z (-5 y^3 + 3 y^4 
+ y z^2 + y^2 (6 + z - 6 z^2) +z^2 (6 - 5 z + 3 z^2)) H(1, z) +36 y z (-5 y^3 + 
3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) +z^2 (6 - 5 z + 3 z^2)) H(2, y))/(216 y z (- 
1 + y + z) (y + z)^4) 

答えて

4

です。 +または - を行の最初の文字にする方法は次のとおりです。

sed -e 's/^[ \t]*//' file1.m | 
    tr -d '\n' | 
    sed 's/\(\(.\)\{,80\}\) \([\+\-]\)/\1\n\3/g' 

編集: バックスラッシュをフォーマットしないと消えました。私は\{70,80\}の70の下限も削除しました。 結果:

(4 (5 y^7 (-1 + 4 z) + y^6 (15 - 83 z + 80 z^2) - 5 z^4 (-2 + 4 z - 3 z^2 
+ z^3)+ y^5 (-20 + 147 z - 273 z^2 + 140 z^3) + y z^3 (40 - 154 z + 147 z^2 
- 83 z^3+ 20 z^4) + y^2 z^2 (60 - 254 z + 363 z^2 - 273 z^3 + 80 z^4) 
+ y^3 z (40- 254 z + 462 z^2 - 439 z^3 + 140 z^4) + y^4 (10 - 154 z + 363 z^2 
- 439 z^3+ 160 z^4)) - 9 (y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^3 
+ y^3 (-1+ 4 z) + y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, y) - 9 (y + z)^4 (2 
+ y^2 (3 - 9 z)- 4 z + 3 z^2 - z^3 + y^3 (-1 + 4 z) + y (-4 + 12 z - 9 z^2 
+ 4 z^3)) H(0, z)+ 36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) + z^2 (6 
- 5 z + 3 z^2))H(1, z) + 36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) 
+ z^2 (6 - 5 z+ 3 z^2)) H(2, y))/(216 y z (-1 + y + z) (y 
+ z)^4) 
+0

+/-を使用して各行を開始できますか? –

1

あなたはsedを使用して独自の折りたたみルールを作ることができます。 所望の出力は、あなたがtrfoldの組み合わせを使用することができます

(4 (5 y^7 (-1 + 4 z) + y^6 (15 - 83 z + 80 z^2) - 5 z^4 (-2 + 4 z - 3 z^2 + z^3) 
+ y^5 (-20 + 147 z - 273 z^2 + 140 z^3) + y z^3 (40 - 154 z + 147 z^2 - 83 z^3 
+ 20 z^4) + y^2 z^2 (60 - 254 z + 363 z^2 - 273 z^3 + 80 z^4) + y^3 z (40 
- 254 z + 462 z^2 - 439 z^3 + 140 z^4) + y^4 (10 - 154 z + 363 z^2 - 439 z^3 
+ 160 z^4)) - 9 (y + z)^4 (2 + y^2 (3 - 9 z) - 4 z + 3 z^2 - z^3 + y^3 (-1 
+ 4 z) + y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, y) - 9 (y + z)^4 (2 + y^2 (3 - 9 z) 
- 4 z + 3 z^2 - z^3 + y^3 (-1 + 4 z) + y (-4 + 12 z - 9 z^2 + 4 z^3)) H(0, z) 
+ 36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) + z^2 (6 - 5 z + 3 z^2)) 
H(1, z) + 36 y z (-5 y^3 + 3 y^4 + y z^2 + y^2 (6 + z - 6 z^2) + z^2 (6 - 5 z 
+ 3 z^2)) H(2, y))/(216 y z (-1 + y + z) (y + z)^4) 
+0

このソリューションは素晴らしいですが、提供した例では機能しません。エラー:sed:1: "s /((。){70,80})([+ - ])/ \ ...":\ 1はREに定義されていません修正済み –

+0

修正済み私は結果を加えました。 –

+0

ありがとうございました。それはLinuxで完璧に動作します。 2つの軽微な問題:1.最後の行を不必要に破る、すなわち+ z)^ 4)部分が前の行の列80内に依然として残る。 2. mac sedとは異なるため、おそらくmacで動作しません。とにかくこれはまだ素晴らしいです。 –

関連する問題