Forums FUG-FR
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl
Divers et varié >> Programmation >> Script sh et sed (ou autre)
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl?num=1162405284

Message started by Marck on 01. Nov 2006 at 19:21

Title: Script sh et sed (ou autre)
Post by Marck on 01. Nov 2006 at 19:21
Bonjour

J'aimerais savoir comment dans un script sh je peux utiliser sed (ou une autre commande) pour modifier un fichier sans passer par un fichier intermédiaire.

Un exemple pour être plus clair. Dans le fichier original "init" (de fluxbox) je souhaite changer "Clean" en "Cthulhain". Avec le script suivant cela fonctionne bien mais uniquement à l'écran, le fichier "init" n'étant pas modifié.


Code (]#!/bin/sh
echo "debut"
sed 's/Clean/Cthulhain/' init
echo "fin"[/code):

Alors je sais bien faire quelque chose comme ceci qui résoud le problème.

[code]#!/bin/sh
echo "debut"
sed 's/Clean/Cthulhain/' init > init.new
mv init.new init
echo "fin"


Mais j'aimerais savoir s'il est possible de se passer du fichier intermédiaire "init.new". N'hésitez pas à être apparemment "hors sujet" dans vos réponses, toute information concernant la modification de fichiers texte dans un script sh m'intéresse car comme le montre ma question je ne connais guère sed ou awk ou autre...

Marc

Title: Re: Script sh et sed (ou autre)
Post by shes on 01. Nov 2006 at 21:28
#!/bin/sh
sed 's/Clean/Cthulhain/' init >> init

oops non

#!/bin/sh
TMP=`sed 's/Clean/Cthulhain/' init`;
touch init
echo $TMP > init

arf tjs pas top

perl -pi -e 's/Clean/Cthulhain/' init

ou
sed -i init 's/Clean/Cthulhain/' init

Title: Re: Script sh et sed (ou autre)
Post by Marck on 02. Nov 2006 at 07:58
:)

Merci Shes, cela fonctionne comme prévu. J'avais bien essayé cette option -i mais sans écrire le nom du fichier derrière:

[code]% sed -i 's/Clean/Cthulhain/' init
sed: 1: "init": command i expects \ followed by text[/code]

Et là je n'avais pas compris que ceci signifiait que je devais ajouter le nom du fichier... et même maintenant que je le sais, le message ne m'apparait pas plus clair pour autant!

Marc

Title: Re: Script sh et sed (ou autre)
Post by shes on 02. Nov 2006 at 08:11
a vrai dire c'est pas totalement juste car après avoir effectuée cette commande tu te retrouves avec un fichier initinit en plus.

sed -i '' 's/Clean/Cthulhain/' init

est la version correct pour ne pas effectuer de backup.

le message que tu recoit signifie que sed -i attent un autre argument, celui ci correspond à l'extension du backup. On lui donne donc '' ce qui revient à "zero-length extension" comme décrit dans le manuel.

Title: Re: Script sh et sed (ou autre)
Post by Marck on 02. Nov 2006 at 10:31
Merci je n'avais même pas vu la création du fichier initinit!

Donc c'est maintenant avec "sed -i '' 's/Clean/Cthulhain/' init" que c'est parfait. C'est vrai que c'est écrit dans le man:


Quote:
-i extension
Edit files in-place, saving backups with the specified extension.
If a zero-length extension is given, no backup will be saved.


Je vais essayer de RTFMiser un peu plus même si les pages man manquent souvent cruellement d'exemples à mon goût (et pour ma compréhension).

Marc

Title: Re: Script sh et sed (ou autre)
Post by Marck on 02. Nov 2006 at 19:56
Bon je crois que j'ai compris ce que je ne comprenais pas...:)

Il y avait confusion entre "-i" pour l'extention du fichier et "i" pour insérer des lignes dans un fichier en effet c'est ce dernier qui est concerné par ce message:

Quote:
sed: 1: "init": command i expects \ followed by text

et non le "-i" que j'essayais alors d'utiliser.

Voilà, en combinant les deux, je peux donc insérer directement une ligne 25 ajoutant un prompt au fichier dot.cshrc

[code]sed -i '' '25i\
set prompt = "`whoami`% "
' dot.cshrc[/code]
Cela tombe bien, je souhaitais justement le faire :)
Marc

Title: Re: Script sh et sed (ou autre)
Post by Marck on 19. Nov 2006 at 18:46
Ce post étant maintenant mondialement connu ;) j'aimerais le compléter un peu.

Dans le fichier /usr/share/skel/dot.login je souhaite commenter les lignes non commentées. J'arrive à toutes les (re)commenter:

Quote:
% sed 's/^/#/' /usr/share/skel/dot.login
## $FreeBSD: src/share/skel/dot.login,v 1.16 2001/06/25 20:40:02 nik Exp $
##
## .login - csh login script, read by login shell, after `.cshrc' at login.
##
## see also csh(1), environ(7).
##
#
#[ -x /usr/games/fortune ] && /usr/games/fortune freebsd-tips


J'arrive à ne commenter que celles qui le sont déjà avec: sed '/#/s/^/#/' Mais je ne parviens pas à faire le contraire... En lisant des exemples, j'ai pensé qu'il fallait faire: sed '/#/!s/^/#/' mais ceci ne fonctionne pas. Alors j'ai aussi essayé: sed '/#/s/!^/#/' mais ce n'est pas mieux... Donc, même si tout commenter pourrait faire l'affaire, j'aimerais bien savoir (simple question de curiosité).

Merci, Marc

Title: Re: Script sh et sed (ou autre)
Post by shes on 20. Nov 2006 at 09:25
sed '/^[^#]/s/^/#/' /usr/share/skel/dot.login

Title: Re: Script sh et sed (ou autre)
Post by Marck on 20. Nov 2006 at 13:25
Bien... Merci

Forums FUG-FR » Powered by YaBB 2.5.2!
YaBB Forum Software © 2000-2025. All Rights Reserved.