2009-11-17 7 views
0

Je suis en train de faire un remplacement par lots pour/avec un motif assez complexelinux remplacement par lots complexes

Jusqu'à présent, je trouve le motif que:

find '(' -name '*.php' -o -name '*.html' ')' -exec grep -i -n 'hello' {} + 

La chaîne que je veux remplacer est actuellement comme suit:

<img src="/some/path/to/somewhere/hello" /> 

où le chemin de l'image varie mais contiennent toujours la sous-chaîne « bonjour » à la fin

Je voudrais saisir le chemin et effectuer un remplacement comme suit:

<img src="<?php myfunction('(/some/path/to/somewhere/)'); ?>" /> 

Quelle serait une bonne façon de réaliser cela?

Toute aide sera en mesure d'apprécier. .

Répondre

0

Remplacer -exec grep ..... avec

-exec cat '{}' | sed s/<img src="(/some/path/to/somewhere/)hello" />/<img src="<?php myfunction('(\1)(constant)'); ?>" />/ > /tmp/output; mv /tmp/output '{}' ';' 

espaces Évasion, "et/symboles dans la recherche et les motifs de remplacement de sed avec backslahes comme aime sed

Par exemple, cela extraira/chemin /:

echo "<img src=\"/path/hello\"" | sed "s/<img\ src=\"\(\/path\/\)hello/\1/" 
+0

cela semble être une bonne approche, la seule chose est que, comme mentionné, le chemin change de fichier en fichier. Donc, je n'ai pas un chemin unique.Cela peut être/some/chemin/vers/somewh ere/ou/ici/chemin/vers/autre/... – Mike

+0

Remplacez-le par. * puis, comme echo " Dmitry

+0

Je recommanderais. *? puisque vous pourriez avoir deux balises img sur une ligne ... – Benj