#1 Le 24/10/2011, à 17:18
- Vergeylen
[Besoin expert Awk] Remplacement d'une sous chaine dans un fichier
Bonjour tout le monde,
Je suis confronté à un problème pourtant simple d'apparence, mais qui m'arrache les cheveux...
Je voudrais remplacer
# Netmask of abacus SIP p0
lappend args "xxx.xxx.xxx.xxx"
par
# Netmask of abacus SIP p0
lappend args "1.2.3.4"
ma commande awk trouve soit les champs entiers, soit les retours lignes (voir les commandes ci dessous), mais pas les deux en meme temps.
awk '{ sub(/# Netmask of abacus SIP p0/,"Autre champ") };1' testfile.txt
awk '{ sub(/[^\n]/,"Fin de ligne") };1' testfile.txt
Quelqu'un aurait-il une idée de comment combiner les deux?Ah oui, j'oubliais, malheureusement, il y a un nbr indéterminé de caractères d'espacement entre 'p0' et le retour ligne... ;-(
Merci de m'avoir lu!
Cordialement,
Daniel
Hors ligne
#2 Le 24/10/2011, à 17:30
- sputnick
Re : [Besoin expert Awk] Remplacement d'une sous chaine dans un fichier
Ça ça te convient ? Le but au final, c'est de sortir que ces 2 lignes là ou bien de modifier un fichier ? Dans le dernier cas, sed serait mieux...
awk '/^# Netmask of abacus SIP p0/{print; getline; print "lappend args \"1.2.3.4\""}' fichier
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 25/10/2011, à 11:27
- Vergeylen
Re : [Besoin expert Awk] Remplacement d'une sous chaine dans un fichier
Bonjour,
Merci pour ta réponse. En effet, je souhaiterais modifier ces deux lignes là dans le fichier. J'ai bien tenté avec sed, mais je suis confronté au même problème (le \n ne passe pas). Voici la commande que j'utilise:
sed 's/# Gateway IP of abacus SIP p0 \nlappend args "xxx.xxx.xxx.xxx"/new-word\n test/g' -i testfile
Pour compliquer le tout, il y a ce nombre indéterminé d'espaces avant la fin de ligne...
Merci pour l'aide!
Cordialement,
Daniel.
Dernière modification par Vergeylen (Le 25/10/2011, à 11:28)
Hors ligne
#4 Le 25/10/2011, à 11:58
- ehmicky
Re : [Besoin expert Awk] Remplacement d'une sous chaine dans un fichier
Salut,
Peut-être :
sed '/# Netmask of abascus SIP p0/ {n;s/xxx.xxx.xxx.xxx/1.2.3.4/}' fichier.txt
En supposant que ce soient deux espaces qui séparent "of" et "abascus" (et non une tabulation)
Dernière modification par ehmicky (Le 25/10/2011, à 11:59)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#5 Le 25/10/2011, à 13:57
- Deather
Re : [Besoin expert Awk] Remplacement d'une sous chaine dans un fichier
Bonjour,
Je ne sais pas si c'est ce que tu désires mais voilà ce que je te propose :
sed -e 's/\(lappend\).*\(args\).*/\1 \2 \"1.2.3.4\"/g'
Cordialement,
Hors ligne
#6 Le 31/10/2011, à 15:23
- Vergeylen
Re : [Besoin expert Awk] Remplacement d'une sous chaine dans un fichier
Bonjour à tous,
Excusez moi pour ma réponse tardive.
Un tout grand merci pour vos réponses, elles répondent parfaitement à mes besoins, surtout celle de ehmicky!
Je vous remercie de vous être creusés la tête!
Cordialement,
Daniel.
Hors ligne