Welcome, Guest. Please Login or Register
FUG-FR logo
 
  HomeHelpSearchLoginRegister  
 
Script sh et sed (ou autre) (Read 5205 times)
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Script sh et sed (ou autre)
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" 



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
Back to top
 
WWW WWW  
IP Logged
 
shes
Global Moderator
*****
Offline


Et qemu c'est du flan?

Posts: 178
Geneva
Gender: male
Re: Script sh et sed (ou autre)
Reply #1 - 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
Back to top
« Last Edit: 01. Nov 2006 at 22:09 by shes »  

...&&Dirty Freebsd: http://www.freebsders.org/.
WWW WWW  
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Script sh et sed (ou autre)
Reply #2 - 02. Nov 2006 at 07:58
 
Smiley

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 



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
Back to top
 
WWW WWW  
IP Logged
 
shes
Global Moderator
*****
Offline


Et qemu c'est du flan?

Posts: 178
Geneva
Gender: male
Re: Script sh et sed (ou autre)
Reply #3 - 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.
Back to top
 

...&&Dirty Freebsd: http://www.freebsders.org/.
WWW WWW  
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Script sh et sed (ou autre)
Reply #4 - 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
Back to top
 
WWW WWW  
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Script sh et sed (ou autre)
Reply #5 - 02. Nov 2006 at 19:56
 
Bon je crois que j'ai compris ce que je ne comprenais pas...Smiley

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 


Cela tombe bien, je souhaitais justement le faire Smiley
Marc
Back to top
 
WWW WWW  
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Script sh et sed (ou autre)
Reply #6 - 19. Nov 2006 at 18:46
 
Ce post étant maintenant mondialement connu Wink 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
Back to top
 
WWW WWW  
IP Logged
 
shes
Global Moderator
*****
Offline


Et qemu c'est du flan?

Posts: 178
Geneva
Gender: male
Re: Script sh et sed (ou autre)
Reply #7 - 20. Nov 2006 at 09:25
 
sed '/^[^#]/s/^/#/' /usr/share/skel/dot.login
Back to top
 

...&&Dirty Freebsd: http://www.freebsders.org/.
WWW WWW  
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Script sh et sed (ou autre)
Reply #8 - 20. Nov 2006 at 13:25
 
Bien... Merci
Back to top
 
WWW WWW  
IP Logged