Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. hmm
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