Commande SED

Résolu
Stef60 Messages postés 257 Statut Membre -  
Stef60 Messages postés 257 Statut Membre -
Bonjour,
je bloque sur un probleme qui doit etre simple à regler.

j'ai besoin d'ajouter une ligne vierge avant un motif.

J'ai créé un script dans lequel il y a ces lignes:
sed -i '/\[\//i\'"$1"'R = ' /usr/fichier.txt
sed -i '/\[\//i\'"$1"'W = '/usr/fichier.txt

resultat de mon fichier.txt
si $1 = toto

totoR =
totoW =
[/]

je voudrais obtenir ca:
totoR =
totoW =

[/]

De plus, c'est normal que la commande SED ajoute des sauts de ligne en fin de fichier ?

D'avance Merci

13 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    En espérant avoir bien compris ta demande...
    $ cat plop
    blabla
    blablabla
    blablaba
    [/]
    $ sed '\|[/]| i\
    \
    '"$1"'R =\
    '"$1"'W =\
    ' plop
    blabla
    blablabla
    blablaba
    
    totoR =
    totoW =
    
    [/]
    $
    Si ça marche, rajoute l'option "-i" ;-))
    0
  2. Stef60 Messages postés 257 Statut Membre 41
     
    Merci de ton retour.
    J'ai du mal à comprendre comment utiliser ce que tu me donnes.
    j'ai modifié mon script avec ca :
    sed -i '\|[/]| i\'"$1"'R = \ '"$1"'W = \' /usr/fichier.txt

    Mais ca fonctionne encore moins bien qu'avec 2 lignes.
    j'obtiens ca: $1 = toto
    totoR = totoW =
    [/]

    plus aucun saut de ligne
    0
    1. Stef60 Messages postés 257 Statut Membre 41
       
      j'ai compris.
      il fallait que je tape ca:
      sed -i '\|[/]| i\'"$1"'R = \
      '"$1"'W = \
      \' /usr/fichier.txt

      la ca marche.

      Par contre, mon script est tout laid.

      j'avais essayé ca:
      sed -i '/\[\//i\{x;p;x}' /usr/fichier.txt
      ou ca /usr/fichier.txt
      sed -i '/\[\//i\\n' /usr/fichier.txt

      mais ca marche pas.
      0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ne te sers de l'oprion "-i" qu'une fois que ta syntaxe marchera !!!
     sed  '\|[/]| i\\n'"$1"'R =\n'"$1"'W = \n'
    ;-))
    0
  4. Stef60 Messages postés 257 Statut Membre 41
     
    ca ne fonctionne pas
    resultat $1=test2

    \ntest2R =ntest2W = n
    [/]
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Affiche ton script et les commandes que tu tapes...
    0
  7. Stef60 Messages postés 257 Statut Membre 41
     
    le voici:
    #!/bin/sh

    # ce script va permettre de :
    # - creer un repository
    # - changer le proprietaire et le groupe du repository en $USER
    # - chmoder le repository en 771

    # le user de Apache est :
    USER=svn

    if [ $# = 1 ]
    then
    /usr/local/subversion-1.3.1/bin/svnadmin create /svn/$1
    chown -R $USER.$USER /svn/$1
    chmod -R 771 /svn/$1
    echo repository fonctionnel.
    echo "" >> /svn/permissions.txt
    sed '\|[/]| i\\n'"$1"'R =\n'"$1"'W = \n' /svn/permissions.txt
    echo "["$1":/]" >> /svn/permissions.txt
    echo "@Adm = rw" >> /svn/permissions.txt
    echo "* =" >> /svn/permissions.txt
    echo "" >> /svn/permissions.txt
    echo "["$1":/branches]" >> /svn/permissions.txt
    echo "@Adm = rw" >> /svn/permissions.txt
    echo "@"$1"R = r" >> /svn/permissions.txt
    echo "@"$1"W = rw" >> /svn/permissions.txt
    echo "* =" >> /svn/permissions.txt
    echo "" >> /svn/permissions.txt
    echo "["$1":/tags]" >> /svn/permissions.txt
    echo "@Adm = rw" >> /svn/permissions.txt
    echo "@"$1"R = r" >> /svn/permissions.txt
    echo "@"$1"W = rw" >> /svn/permissions.txt
    echo "* =" >> /svn/permissions.txt
    echo "" >> /svn/permissions.txt
    echo "["$1":/trunk]" >> /svn/permissions.txt
    echo "@Adm = rw" >> /svn/permissions.txt
    echo "@"$1"R = r" >> /svn/permissions.txt
    echo "@"$1"W = rw" >> /svn/permissions.txt
    echo "* =" >> /svn/permissions.txt
    echo "" >> /svn/permissions.txt
    else
    echo nombre d\'argument incorrect.
    echo usage: svncreate /svn/repository
    fi
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Tu peux afficher tes tests aussi (en rapport avec ton post #5), fichiers + commandes + résultats.

    Affiche aussi le résultat de la commande "cat -A /usr/fichier.txt" s'il ta plaît, merci.
    0
  9. Stef60 Messages postés 257 Statut Membre 41
     
    fichier de depart:
    [groups]

    Adm =

    [/]
    @Adm = rw
    * =

    --------------------------------------------------------------------------- (juste pour separer, n'appartient pas au fichier)
    cat -A /svn/permissions.txt
    [groups]$
    $
    Adm = $
    $
    [/]$
    @Adm = rw$
    * =$

    -----------------------------------------------------------------------------(juste pour separer, n'appartient pas au fichier)
    sed '\|[/]| i\\n'"$1"'R =\n'"$1"'W = \n' /svn/permissions.txt
    [groups]

    Adm =

    \nR =nW = n
    [/]
    @Adm = rw
    * =

    -----------------------------------------------------------------------------(juste pour separer, n'appartient pas au fichier)
    idealement a la fin de mon script j'aimerai obtenir ca avec $1 = toto:
    [groups]

    Adm =
    totoR =
    totoW =

    [/]
    @Adm = rw
    * =

    [toto:/]
    @Adm = rw
    @totoR = r
    @totoW = rw
    * =
    0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Tiens j'ai juste modifié la syntaxe pour enlever le 1er saut de ligne :
    $ cat steph 
    [groups]
    
    Adm =
    
    [/]
    @Adm = rw
    * =
    
    $ sed  '\|[/]| i'"$1"'R =\n'"$1"'W = \n' steph 
    [groups]
    
    Adm =
    
    totoR =
    totoW = 
    
    [/]
    @Adm = rw
    * =
    
    $
    Si ça marche pas je comprends pas pourquoi !? ;-\
    Le 'cat -A" c'était justement pour afficher les caractères non-imprimables au cas ou ce seraient eux qui influençaient la non prise en compte des caractères "\n"...
    0
  11. Stef60 Messages postés 257 Statut Membre 41
     
    ca ne fonctionne toujours pas
    voici le resultat:
    [groups]

    Adm =

    totoR =ntotoW = n
    [/]
    @Adm = rw
    * =

    ca fait 4 heures que je cherche, et avec \n ca n'a jamais marché.
    soit il ecrit n ou \n mais pas de saut de ligne.

    c'est pour cette raison que j'ai essayé ca:
    sed -i '/\[\//i\{x;p;x}' /usr/fichier.txt
    c'etait sensé ajouter une ligne vierge avant un motif
    mais j'obtient le meme resultat : il m'ecrit {x;p;x}
    0
  12. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Et comme ça ?
    sed '\|[/]| i\
    '"$1"'R =\
    '"$1"'W =\
    ' steph
    Ça donne quoi ?
    0
  13. Stef60 Messages postés 257 Statut Membre 41
     
    ca fonctionne impec
    0
  14. Stef60 Messages postés 257 Statut Membre 41
     
    je prend cette solution:
    sed -i '/\[\//i\
    '"$1"'R =\
    '"$1"'W =\
    '

    celle ci:
    sed '\|[/]| i\
    '"$1"'R =\
    '"$1"'W =\
    '

    ecrit 2 lignes plusieurs fois dans mon fichier

    le plus important: merci de ton aide.
    0