2017-02-16 8 views
0

brechen ich einen Ausdruck nach 135 Zeichen am Schneiden und Drucken jeder Zeile beginnend mit + oder - durch den BefehlAusgabe auf macos, während ein Ausdruck in mehreren Linien durch sed

cat file1 | tr -d '\n' > file2 
sed 's/\(\(.\)\{,135\}\) \([\+\-]\)/\1\n\3/g' file2 > file3 

cat file1

(-128*r1*T6*y*(22*y^3 + 32*y^2*(-1 + z) + 33*y*(-1 + z)^2 + 12*(-1 + z)^3))/ 
    3 - (128*r1*T2*y*(11*y^3 - 2*y^2*z - 3*y*z^2 - 12*z^3))/3 + 
(128*r1*T3*z*(12*y^3 + 3*y^2*z + 2*y*z^2 - 11*z^3))/3 - 
2816*r1*T1*(y^4 + 2*y^3*(-1 + z) + 3*y^2*(-1 + z)^2 + 2*y*(-1 + z)^3 + 
    (1 - z + z^2)^2) + (256*r1*T5*(11 + 11*y^4 + 14*z - 14*y^3*z - 36*z^2 + 
44*z^3 - 22*z^4 - 6*y^2*z*(-7 + 6*z) - 2*y*z*(21 - 36*z + 22*z^2)))/3 + 
(128*r1*T8*(110 + 99*y^4 - 174*z + 261*z^2 - 164*z^3 + 99*z^4 + 
    2*y^3*(-82 + 81*z) + 3*y^2*(87 - 172*z + 86*z^2) + 
    6*y*(-29 + 86*z - 86*z^2 + 27*z^3)))/3 

Das funktioniert auf Linux, aber nicht in Mac. Der angezeigte Fehler ist folgender:

sed: 1: "s/\(\(.\)\{,135\}\) \([ ...": RE error: invalid repetition count(s) 

Irgendein Ausweg, um dies zu beheben?

+0

Versuchen Sie stattdessen {1,135}. Gemäß der Dokumentation kann das zweite Argument weggelassen werden und nicht das erste. Siehe https://www.gnu.org/software/sed/manual/sed.html#sed-regular-expressions – Himanshu

+0

mit dieser Änderung bricht es nicht mehr die Zeilen .. aber die Beschwerde ist nicht da. –

+0

Probieren Sie 's/\ (. \ {1,135 \} \) \ ([+ -] \)/\ 1 \ n \ 2/g'' –

Antwort

0

BSD sed ersetzt \n nicht durch ein Zeilenumbruchzeichen. Sie können jedoch einbetten wörtliche Newline in den String:

$ tr -d '\n' < file1 | sed 's/\(\(.\)\{0,135\}\) \([\+\-]\)/\1\ 
> \3/g' 
(-128*r1*T6*y*(22*y^3 + 32*y^2*(-1 + z) + 33*y*(-1 + z)^2 + 12*(-1 + z)^3))/ 3 - (128*r1*T2*y*(11*y^3 - 2*y^2*z - 3*y*z^2 - 12*z^3))/3 
+ (128*r1*T3*z*(12*y^3 + 3*y^2*z + 2*y*z^2 - 11*z^3))/3 - 2816*r1*T1*(y^4 + 2*y^3*(-1 + z) + 3*y^2*(-1 + z)^2 + 2*y*(-1 + z)^3 + (1 - z 
+ z^2)^2) + (256*r1*T5*(11 + 11*y^4 + 14*z - 14*y^3*z - 36*z^2 + 44*z^3 - 22*z^4 - 6*y^2*z*(-7 + 6*z) - 2*y*z*(21 - 36*z + 22*z^2)))/3 
+ (128*r1*T8*(110 + 99*y^4 - 174*z + 261*z^2 - 164*z^3 + 99*z^4 + 2*y^3*(-82 + 81*z) + 3*y^2*(87 - 172*z + 86*z^2) + 6*y*(-29 + 86*z 
- 86*z^2 
+ 27*z^3)))/3 

Die > zu Beginn der zweiten Zeile ist die sekundäre Eingabeaufforderung, was darauf hinweist, dass die Strings in einfachen Anführungszeichen noch nicht geschlossen.

+0

Es behauptet, sed: 1: "s/(\ (\) \ (\") \ ([... ": RE Fehler: Klammern nicht ausgeglichen und ich kann auch nicht kompilieren. –

+0

Irgendwie , Verlor ich den Backslash vor dem ersten '('; jetzt behoben. – chepner