Scénario Shell - Comment remplacer les lignes

Ubuntu 9.10

Salut les gars,

Je veux créer un script qui mettra automatiquement à jour une chaîne dans le fichier .htaccess. Quelqu'un pourrait-il indiquer des instructions pour créer un script de base "Trouver et remplacer"?

J'imagine quelque chose qui fait fondamentalement des points: "Trouvez des marqueurs spéciaux #ABC et #XYZ ... Supprimer les enregistrements entre les marqueurs et les remplacer sur 'foo'».
Invité:

Babette

Confirmation de:

Veux-tu

sed

:

sed -i s/regex to look for/string to replace it with/

S'il est nécessaire qu'il consiste en plusieurs lignes, vous pouvez écrire des scénarios plus complexes, bien que à une certaine puissance et à un peu d'essentialité. sed Commencez à travailler contre lui et je préfère écrire plus détaillé, mais globalement une langue de scénario claire (je préfère Ruby , Mais des goûts diffèrent).

Si vous donnez un véritable exemple de ce qui tente de réaliser, quelqu'un est susceptible de proposer une «meilleure» façon de le faire; Pour le moment, votre exemple est très vague pour donner une solution spécifique.

Hannah

Confirmation de:

Si vos fichiers sont petits (Je pense que ça devrait être .htaccess), cette Perl Peut-être "avaler" et travailler avec tout comme une seule chaîne en utilisant s /// s (modificateur 's' À la fin traite la ligne entière comme une ligne).

Exemple: perl -i.bak -p -0 -e 's / # ABC \ n. * # XYZ / foo / s' Liste des noms de fichiers

-i.bak rapports Perl Enregistrer des copies de sauvegarde, dans ce cas, on l'appelle list.bak of.bak file.bak names.bak -p -0 rapports perl que vous devez avaler tout le dossier, et -e Il lui dit d'appliquer une expression régulière à la ligne de commande.

Cette version particulière ne sera remplacée que par la première série de marqueurs et ne fera rien si les marqueurs n'existent pas du tout (Mais cela créera toujours des fichiers de sauvegarde).

Christine

Confirmation de:

Essaye ça:

awk '/^#ABC/ {start=1; print; next} /^#XYZ/ {start=0; print "foo"; print; next} start!=1 {print}' .htaccess > .htaccess.NEW

Il peut être réduit à:

awk '/^#ABC/ {start=1; print; next} /^#XYZ/ {start=0; print "foo"} start!=1 {print}' .htaccess > .htaccess.NEW

Pour répondre aux questions, connectez-vous ou registre