Rechercher et remplacer plusieurs valeurs différentes à la fois


15

J'ai un fichier avec plusieurs instances de Text_1et Text1et je dois remplacer ces deux chaînes par Text_Aet TextBrespectivement.

Actuellement, je fais deux fonctions Rechercher et remplacer sur chaque fichier, l'une qui le trouve Text_1et le remplace Text_Aet l'autre qui le trouve Text1et le remplace TextB.

Existe-t-il un moyen de faire tout cela à la fois au lieu d'avoir à exécuter "Rechercher et remplacer" deux fois?

J'utilise Dreamweaver CS3, mais j'ai également Notepad ++, Notepad régulier, OO Writer, MS Word si cela sera plus facile. Idéalement, je pourrais le faire dans Dreamweaver ou Notepad ++ mais je suis prêt à télécharger quelque chose d'autre pour faire le travail. Je préférerais ne pas avoir à faire de trucs en ligne de commande ou créer un fichier batch (bien que j'en sois conscient, je ne le comprends pas vraiment).

Dans le cas où la description ci-dessus n'est pas claire, laissez-moi l'expliquer de cette façon ...

Je veux exécuter Find & Replace 1 fois dans 1 document et je veux qu'il fasse TOUTES les opérations suivantes au cours de cette instance Find & Replace:

  1. Rechercher Text_1 et remplacer parText_A
  2. Rechercher Text1 et remplacer parTextB

Je n'essaye pas de faire une recherche et un remplacement sur plusieurs documents.


Il peut être possible d'utiliser la recherche et le remplacement d'expressions régulières s'il existe un modèle distinct. Sinon, ce n'est pas possible @matt
Sathyajith Bhat

Réponses:


9

Jetez un œil à Sed . Vous pouvez facilement atteindre votre objectif en une seule ligne de commande

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt


24

Depuis Notepad ++ 6.0, il est en fait possible sans scripts en utilisant la technique suivante:

Rechercher: Text_1 et remplacer par: Text_A

Rechercher: Text2 et remplacer par: TextB

Rechercher: (Texte_1) | (Texte2)

Remplacer: (? 1Text_A) (? 2TextB)

La syntaxe générale est:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

? 1 fait référence à la première phrase capturée et ainsi de suite.

Je l'ai obtenu de la réponse suivante: /programming//a/16104946/287101


3

En utilisant Notepad ++, vous pouvez soit

  • Ouvrez tous les fichiers contenant les mots que vous souhaitez remplacer et utilisez Rechercher / Remplacer dans tous les fichiers ouverts

    entrez la description de l'image ici

  • Utiliser Rechercher / Remplacer dans les fichiers

    entrez la description de l'image ici

  • Enregistrer une macro exécutant les options de recherche et de remplacement et la lire


Ce n'est pas ce que j'essaie de faire. Je ne veux pas le remplacer sur plusieurs fichiers à la fois, je veux remplacer plusieurs chaînes dans un seul fichier à la fois. Je veux pouvoir exécuter une recherche et un remplacement et le faire rechercher dans le document et remplacer toutes les instances de Text_1 par Text_A et toutes les instances de Text1 par TextB. Deux chaînes séparées remplacées par deux valeurs distinctes dans un fichier.
mat

Les liens d'image sont cassés, avez-vous des chances de les réparer d'une manière ou d'une autre?
Bobby

2

Il vaut mieux exécuter Find & Replace deux fois, car vous avez deux remplacements différents. Cependant, il devrait y avoir très peu de compromis dans le temps de traitement. Considérer ce qui suit:

Exécution de Find & Replace une fois, recherche terme par terme:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

À des fins de fonctionnement, nous supposerons qu'il est linéaire et dirons que cela fonctionne en temps O (n).

Vous voulez trouver deux termes différents. L'exécution de Find & Replace deux fois ressemble à:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

ce qui prendrait O (2x1n), soit deux fois plus longtemps que la recherche d'un terme.

La recherche de deux termes avec deux remplacements ressemblerait théoriquement à:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

L'obtention des termes ne prend pas beaucoup de puissance de traitement, donc vous recherchez essentiellement deux ensembles de recherches pour chaque terme, donnant un temps de O (1x2n), s'exécutant une fois mais recherchant deux termes.

Bien que vous économisiez du temps en ne chargeant pas chaque terme deux fois, vous passeriez plus de temps à rechercher deux fois chaque terme, donc il y a peu de compromis, et puisque cette fonctionnalité serait utilisée moins souvent que la recherche d'un terme avec un remplacement, les développeurs d'applications supposent simplement de ne pas écrire cette fonctionnalité.

AVERTISSEMENT AUX PROGRAMMATEURS: Ceci est un exemple généralisé. Je sais que c'est mieux, mais j'essaie de montrer pourquoi cette fonctionnalité n'est pas trouvée.


0

La prise en charge des expressions régulières dans Notepad ++ est sévèrement limitée. Sans l'opérateur d'alternance, il n'y a aucun espoir de se rapprocher de ce que vous voulez faire. Vous aurez besoin d'utiliser sedou d'un éditeur qui a un meilleur support regex.

Les extensions GNU couramment utilisées pour la syntaxe des expressions régulières incluent:

  • les ? opérateur, ce qui signifie zéro ou unique en son genre;
  • le | opérateur d'alternance ("foo | bar" correspond à "foo" ou "bar")
  • des modificateurs comme / g pour les gourmands ou / i pour ne pas respecter la casse;
  • {a, b} pour désigner entre les jetons a et b d'une sorte.
  • (motif) + pour mach une ou plusieurs correspondances du même motif

Le composant Scitilla, qui sous-tend Notepad ++, est strictement compatible POSIX et ne reconnaît pas ces extensions. Vous pouvez consulter les expressions régulières pour un aperçu complet et quelques exemples

La source

Voir également

GNUWin32 sedpour Windows


0

J'utilise TextCrawler pour la recherche et le remplacement par lots. (J'utilise Notepad ++ pour la recherche / remplacement unique sur plusieurs fichiers car il est plus rapide que Textcrawler.) TextCrawler prend en charge les expressions régulières ainsi que la recherche / recherche normale. Les fichiers batch peuvent être enregistrés et rechargés pour une utilisation future.


Veuillez consulter Comment puis-je recommander un logiciel dans mes réponses? En particulier, au strict minimum, dites où se procurer le logiciel.
G-Man dit `` Réintègre Monica ''

La fonction de traitement par lots est uniquement disponible dans la version Pro non gratuite de TextCrawler.
Hobbes

0

Cela peut également être fait en utilisant le plugin ActiveX (pour Notepad ++) et en exécutant un script personnalisé:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")

Cela fonctionne, mais notez qu'en raison d'un bogue actuel dans le plugin ActiveX, un caractère NULL est ajouté au fichier chaque fois que vous exécutez le script.
Aidan

-1

Cela fonctionne pour tous les numéros (pour supprimer tous les numéros du texte / article)

  1. Appuyez sur Ctrl + H pour ouvrir la boîte de dialogue Rechercher et remplacer.

  2. Dans la zone "Rechercher quoi", tapez ^ #

  3. Laissez la case "Remplacer par" vide.

  4. Remplace tout.


1
L'OP ne veut pas seulement que les numéros soient supprimés, il voulait le remplacer par une lettre.
booyaa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.