'+' (une ou plusieurs occurrences) ne fonctionne pas avec "sed' de la commande

J'essaie d'affiner mon code par se débarrasser de l'inutile, des espaces blancs, des lignes vides, et d'avoir des parenthèses équilibré avec un espace entre eux, donc:

    int a = 4;
    if ((a==4) ||   (b==5))

    a++   ;

devrait changer:

    int a = 4;
    if ( (a==4) || (b==5) )
    a++ ;

Il fonctionne pour les crochets et les lignes vides. Cependant, il oublie de réduire les multiples espaces d'un espace:

    int a = 4;
    if ( (a==4) ||   (b==5) )
    a++    ;

Voici mon script:

    #!/bin/bash
    # Script to refine code
    #
    filename=read.txt

    sed 's/((/( (/g' $filename > new.txt
    mv new.txt $filename

    sed 's/))/) )/g' $filename > new.txt
    mv new.txt $filename

    sed 's/+//g' $filename > new.txt
    mv new.txt $filename

    sed '/^$/d' $filename > new.txt
    mv new.txt $filename

Aussi, est-il un moyen de rendre ce script plus concis, par exemple, la suppression ou la réduction du nombre de commandes?

  • Par ailleurs, en BRE vous pouvez utiliser \{1,\} au lieu de +
  • Je ne comprends pas, est-ce que cela donner u de plusieurs espaces?
  • / \{1,\}/ signifie "un ou plusieurs espaces", oui.
  • votre réponse est grande. J'ai édité accepté de répondre à comprendre votre commentaire!
InformationsquelleAutor Siddhartha | 2012-08-23