SHELL-remplacer un ligne dans un fichier-AWK
Résolu/Fermé
kenchyne
Messages postés
3
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
16 avril 2007
-
6 avril 2007 à 17:06
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 sept. 2013 à 12:13
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 sept. 2013 à 12:13
10 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 897
6 avril 2007 à 17:25
6 avril 2007 à 17:25
Salut,
myvar="toto" cat $fic | awk '{ sub(/'$myvar'/,"commentaire"); print}'Petit exemple :
[jp@MDK trash]$ cat fich.txt Je m'appelle Toto et moi Tutu et mon frère Titi. [jp@MDK trash]$ var="Toto" [jp@MDK trash]$ cat fich.txt | awk '{ sub(/'$var'/,"Tata");print}' Je m'appelle Tata et moi Tutu et mon frère Titi. [jp@MDK trash]$;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 avril 2007 à 22:20
6 avril 2007 à 22:20
si j'utilise un SED, je me retrouve avec plusieurs contenu de fichier. Le sed -i -e "s/$mot_a_remplacer/\* $mot_a_remplacer/g" $fic n'est pas faisable sous mon OS....bizarre...
Non, pas tant que ça. Ça dépend en fait de la version de "sed".
Le switch "-i" ne fonctionne qu'avec les version supérieures à 3.02 (GNU-sed), et je pense que sous Solaris, ta version doit être inférieure.
Mais néanmoins tu peux passer par un fichier temporaire :
Non, pas tant que ça. Ça dépend en fait de la version de "sed".
Le switch "-i" ne fonctionne qu'avec les version supérieures à 3.02 (GNU-sed), et je pense que sous Solaris, ta version doit être inférieure.
Mais néanmoins tu peux passer par un fichier temporaire :
sed -e 's/'$var'/commentaire/' < fichier > fichier.tmp mv fichier.tmp fichier
Pardon je n'ai pais eu le temps de revenir avant,
j'ai trouvé une autre commande : (remplace les é par des e dans les 440 premiers caractères de chaque ligne du fichier)
awk '{ temp=substr($0,1,440) ; gsub("é","e",temp) ; print temp substr($0,441) } ' fic > fic2
Merci bcp pour ton aide.
j'ai trouvé une autre commande : (remplace les é par des e dans les 440 premiers caractères de chaque ligne du fichier)
awk '{ temp=substr($0,1,440) ; gsub("é","e",temp) ; print temp substr($0,441) } ' fic > fic2
Merci bcp pour ton aide.
Bonjour
je voudrais remplacer dans une chaine les caractères accentués par des non accentués mais cela uniquement sur les 200 premiers caractères de chaque ligne. Avez-vous une idée pour faire cela?
je voudrais remplacer dans une chaine les caractères accentués par des non accentués mais cela uniquement sur les 200 premiers caractères de chaque ligne. Avez-vous une idée pour faire cela?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gigabi
Messages postés
3
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007
29 nov. 2007 à 10:38
29 nov. 2007 à 10:38
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
29 nov. 2007 à 11:20
29 nov. 2007 à 11:20
Salut,
La prochaine fois ouvre un nouveau thread plutôt que de poster à la suite d'un post n'ayant aucun rapport avec ta requête, t'auras plus de chance d'obtenir une réponse !
Tiens tu peux essayer de faire ça avec "GNU sed" (rajoute l'option "-i" pour la modification du fichier et "-i.BAK" pour une sauvegarde du fichier original) :
;-))
La prochaine fois ouvre un nouveau thread plutôt que de poster à la suite d'un post n'ayant aucun rapport avec ta requête, t'auras plus de chance d'obtenir une réponse !
Tiens tu peux essayer de faire ça avec "GNU sed" (rajoute l'option "-i" pour la modification du fichier et "-i.BAK" pour une sauvegarde du fichier original) :
$ cat plop àaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié ÀaéeÈeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié àaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié àaéeèeÔoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié àaÉeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié $ sed ' h s/\(^.\{12\}\).*/\1/ y/àâéèêëîïôöùûü/aaeeeeiioouuu/ y/ÀÂÉÈÊËÎÏÔÖÙÛÜ/AAEEEEIIOOUUU/ x s/^.\{12\}\(.*\)/\1/ x G s/\n// ' plop aaeeeeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié AaeeEeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié aaeeeeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié aaeeeeOouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié aaEeeeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié $Remplace "12" par "200" dans ton cas.
;-))
gigabi
Messages postés
3
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007
29 nov. 2007 à 11:28
29 nov. 2007 à 11:28
Merci Beaucoup c'est nikel !
gigabi
Messages postés
3
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007
30 nov. 2007 à 08:51
30 nov. 2007 à 08:51
Pardon, je reviens sur cette question car lorsque je fais la manipulation avce plus de 250 caractères cela ne fonctionne pas.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
30 nov. 2007 à 08:55
30 nov. 2007 à 08:55
Tu peux poster un bout de ton fichier sur C-joint, s'teuplé que je puisse faire des tests, merci ;-))
Bonjour svpp j'ai un probleme avec cette commande :
sed -i.bak "s/$var//" vls-pdshd1.cfg
$var est BEGIN"194" Name = "hd_h264_2" FileName = "/home/flux/SD/hd_h264_1.ts" # Type = "Mpeg2-TS" END BEGIN "Channels" out194 = "network" END BEGIN "out194" DstHost = "225.22.15.15" DstPort = "5001" TTL = "2" Type = "multicast" END BEGIN "LaunchOnStartUp" #flux194 = "start hd_h264_2 out194 local1 --loop" END #################################
j'ai tjr ce erreurr:
sh: BEGIN194: not found
sh: Name: not found
sh: FileName: not found
sh: END: not found
sh: BEGIN: not found
sh: out194: not found
sh: END: not found
sh: BEGIN: not found
sh: DstHost: not found
sh: DstPort: not found
sh: TTL: not found
sh: Type: not found
sh: END: not found
sh: BEGIN: not found
sh: END: not found
sed -i.bak "s/$var//" vls-pdshd1.cfg
$var est BEGIN"194" Name = "hd_h264_2" FileName = "/home/flux/SD/hd_h264_1.ts" # Type = "Mpeg2-TS" END BEGIN "Channels" out194 = "network" END BEGIN "out194" DstHost = "225.22.15.15" DstPort = "5001" TTL = "2" Type = "multicast" END BEGIN "LaunchOnStartUp" #flux194 = "start hd_h264_2 out194 local1 --loop" END #################################
j'ai tjr ce erreurr:
sh: BEGIN194: not found
sh: Name: not found
sh: FileName: not found
sh: END: not found
sh: BEGIN: not found
sh: out194: not found
sh: END: not found
sh: BEGIN: not found
sh: DstHost: not found
sh: DstPort: not found
sh: TTL: not found
sh: Type: not found
sh: END: not found
sh: BEGIN: not found
sh: END: not found
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
2 mai 2012 à 11:46
2 mai 2012 à 11:46
Salut,
sed -i.bak 's|'"${var}"'||' vls-pdshd1.cfg
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
2 mai 2012 à 12:17
2 mai 2012 à 12:17
C'est peut-être à cause des quotes-doubles dans la variable ;-((
Essaie comme ça :
Essaie comme ça :
sed -i.bak 's|'${var}'||' vls-pdshd1.cfg
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
2 mai 2012 à 12:25
2 mai 2012 à 12:25
On peut avoir un exemple du contenu de ton fichier ?
Le contenu de la variable $var est bien :
BEGIN"194" Name = "hd_h264_2" FileName = "/home/flux/SD/hd_h264_1.ts" # Type = "Mpeg2-TS" END BEGIN "Channels" out194 = "network" END BEGIN "out194" DstHost = "225.22.15.15" DstPort = "5001" TTL = "2" Type = "multicast" END BEGIN "LaunchOnStartUp" #flux194 = "start hd_h264_2 out194 local1 --loop" END #################################
Le contenu de la variable $var est bien :
BEGIN"194" Name = "hd_h264_2" FileName = "/home/flux/SD/hd_h264_1.ts" # Type = "Mpeg2-TS" END BEGIN "Channels" out194 = "network" END BEGIN "out194" DstHost = "225.22.15.15" DstPort = "5001" TTL = "2" Type = "multicast" END BEGIN "LaunchOnStartUp" #flux194 = "start hd_h264_2 out194 local1 --loop" END #################################
10 sept. 2013 à 12:07
Ca marche nickel!
Mais comment remplacer une ligne entière par "Tata" uniquement si cette ligne contient "appelle" ?
(désolé pour les 6 ans de retards)
Merci
10 sept. 2013 à 12:10
Il fallait que je demande pour trouver :
https://forums.commentcamarche.net/forum/affich-16211313-awk-remplacer-une-ligne-d-un-fichier
désolé du dérangement =)
10 sept. 2013 à 12:13
Sinon avec sed :