Commande SED

Résolu/Fermé
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 - 8 avril 2008 à 13:56
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 - 8 avril 2008 à 16:49
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

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 avril 2008 à 14:23
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
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 14:40
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
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 14:48
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 avril 2008 à 14:55
Ne te sers de l'oprion "-i" qu'une fois que ta syntaxe marchera !!!
 sed  '\|[/]| i\\n'"$1"'R =\n'"$1"'W = \n'
;-))
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 15:01
ca ne fonctionne pas
resultat $1=test2

\ntest2R =ntest2W = n
[/]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 avril 2008 à 15:07
Affiche ton script et les commandes que tu tapes...
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 15:15
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 avril 2008 à 15:22
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
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 15:33
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 avril 2008 à 15:40
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
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 15:51
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
8 avril 2008 à 15:56
Et comme ça ?
sed '\|[/]| i\
'"$1"'R =\
'"$1"'W =\
' steph
Ça donne quoi ?
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 15:59
ca fonctionne impec
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 avril 2008 à 16:49
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