文本处理(换行)在shell脚本

问题描述:

我有以下文件:文本处理(换行)在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) 

您可以使用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

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

可以使用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不同。无论如何,这仍然很棒。 –