2016-08-14 165 views
0

我有以下文件:文本處理(換行)在shell腳本

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 

但如何打破一些列之後的行解決了嗎? 所需的輸出是

(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

您可以使用trfold組合:

$ 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) 
+0

是否有可能以+/-開始每行? –

1

可以使用sed讓自己摺疊的規則。 以下是您可以如何製作+或 - 作爲線條的第一個字符。編輯: 沒有格式化反斜槓消失。我還刪除了\{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

這個解決方案會很好,但是您提供的示例不適用。錯誤:sed:1:「s /((。){70,80})([+ - ])/ \ ...」:\ 1未定義RE –

+0

已修正。我還添加了結果。 –

+0

非常感謝。它在linux中完美工作。兩個小問題:1.它不必要地打破最後一行,即+ +)^ 4)部分仍保留在前一行的第80列內。 2.它不適用於mac,可能是因爲mac sed與unix sed不同。無論如何,這仍然很棒。 –