90 votes

Le '+' (une ou plusieurs occurrences) ne fonctionne pas avec la commande 'sed'.

J'essaie d'affiner mon code en me débarrassant des espaces blancs inutiles, des lignes vides et en équilibrant les parenthèses avec un espace entre elles :

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

    a++   ;

devrait changer en :

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

Cela fonctionne pour les parenthèses et les lignes vides. Cependant, il oublie de réduire les espaces multiples à un seul 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

Par ailleurs, existe-t-il un moyen de rendre ce script plus concis, par exemple en supprimant ou en réduisant le nombre de commandes ?

0voto

Calvin Taylor Points 487

Sur le front du bash ;

D'abord j'ai fait un script test.sh

cat test.sh

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    SRC=`echo $line | awk '{print $1}'`
    DEST=`echo $line | awk '{print $2}'`
    echo "moving $SRC to $DEST"
    mv $SRC $DEST || echo "move $SRC to $DEST failed" && exit 1
done < "$1"

puis nous faisons un fichier de données et un fichier de test aaa.txt

cat aaa.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>-12</tag3>
<tag4>37</tag4>
<tag5>-41</tag5>

puis testez et montrez les résultats.

bash test.sh list.txt 
Text read from file: aaa.txt bbb.txt
moving aaa.txt to bbb.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X