2012-06-07 3 views
0

J'ai un modèle commeRechercher et remplacer les modèles sur plusieurs lignes

Fixed pattern 
text which can change(world) 

Je veux remplacer par

Fixed pattern 
text which can change(hello world) 

Ce que je suis en train d'utiliser

cat myfile | sed -e "s#\(Fixed Pattern$A_Z_a_z*\(\)#\1 hello#g > newfile 

MISE À JOUR: Le monde des mots ci-dessus est aussi une variable et va changer Fondamentalement ajouter bonjour af ter la première parenthèse rencontrée après l'expression.

Merci d'avance.

+0

Est-ce que le but est d'ajouter «bonjour» à l'intérieur de chaque parenthèse ouvrante sur la ligne après «Motif fixe»? –

Répondre

3

En supposant que votre but est d'ajouter 'hello ' à l'intérieur de tous les parenthèses sur la ligne après 'Fixed pattern', voici une solution d'ouverture qui devrait fonctionner:

sed -e '/^Fixed pattern$/!b' -e 'n' -e 's/(/(hello /' myfile 

Voici une explication de chaque partie:

/^Fixed pattern$/!b # skip all of the following commands if 'Fixed pattern' 
         # doesn't match 
n      # if 'Fixed pattern' did match, read the next line 
s/(/(hello/   # replace '(' with '(hello ' 
+0

Merci pour cette oeuvre! – PravinCG

+0

@PravinCG - Pas de problème, je viens de l'éditer pour supprimer le 'g' après le remplacement, puisque votre modification indique que vous voulez seulement effectuer le remplacement sur le premier' ('. –

2

Pour ce faire, avec sed, utilisez n:

sed '/Fixed pattern/{n; s/world/hello world/}' myfile 

Vous devrez peut-être plus prudent, mais cela devrait fonctionner pour la plupart des situations. Chaque fois que sed voit le Fixed pattern (vous pouvez utiliser les ancres de ligne ^ et $), il lira la ligne suivante et lui appliquera la substitution.

+0

Mis à jour la question, le monde est aussi une variable – PravinCG

+0

merci pour votre réponse, +1 pour cela. – PravinCG

Questions connexes