Trova e sostituisci contemporaneamente diversi valori diversi


15

Ho un file con più istanze di Text_1e Text1e devo sostituire entrambe quelle stringhe con Text_Ae TextBrispettivamente.

Attualmente sto eseguendo due funzioni Trova e Sostituisci su ciascun file, uno che lo trova Text_1e lo sostituisce Text_Ae l'altro che lo trova Text1e lo sostituisce TextB.

C'è un modo per farlo tutto in una volta invece di dover eseguire due volte "Trova e sostituisci"?

Sto usando Dreamweaver CS3, ma ho anche Notepad ++, Notepad normale, OO Writer, MS Word se quelli saranno più facili. Idealmente, potrei farlo in Dreamweaver o Notepad ++, ma sono aperto a scaricare qualcos'altro per completare il lavoro. Preferirei non dover fare alcuna riga di comando o creare un file batch (mentre ne sono consapevole, non lo capisco davvero).

Nel caso in cui la descrizione sopra non sia chiara, lascia che ti spieghi in questo modo ...

Voglio eseguire Trova e sostituisci 1 volta in 1 documento e voglio che faccia TUTTO quanto segue durante quell'istanza Trova e sostituisci:

  1. Trova Text_1 e sostituisci conText_A
  2. Trova Text1 e sostituisci conTextB

Sto non cercando di fare un Trova e sostituisci in documenti diversi.


Potrebbe essere possibile utilizzare Regexp find e sostituisci se esiste un modello distinto. Altrimenti non è possibile @matt
Sathyajith Bhat

Risposte:


9

Dai un'occhiata a Sed . Puoi facilmente raggiungere il tuo obiettivo da una sola riga di comando

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


24

Da Notepad ++ 6.0 è effettivamente possibile senza script utilizzando la seguente tecnica:

Trova: Text_1 e sostituisci con: Text_A

Trova: Text2 e sostituisci con: TextB

Trova: (Text_1) | (Text2)

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

La sintassi generale è:

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

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

? 1 si riferisce alla prima frase acquisita e così via.

Ho ottenuto questo dalla seguente risposta: /programming//a/16104946/287101


3

Utilizzando Notepad ++, puoi farlo

  • Apri tutti i file contenenti le parole che desideri sostituire e utilizza Trova / Sostituisci in tutti i file aperti

    inserisci qui la descrizione dell'immagine

  • Usa Trova / Sostituisci nei file

    inserisci qui la descrizione dell'immagine

  • Registra una macro eseguendo le opzioni Trova e Sostituisci e riproducila


Non è quello che sto cercando di fare. Non voglio sostituirlo su più file contemporaneamente, voglio sostituire più stringhe in un file contemporaneamente. Voglio essere in grado di eseguire una ricerca e sostituzione e farlo cercare nel documento e sostituire tutte le istanze di Text_1 con Text_A e tutte le istanze di Text1 con TextB. Due stringhe separate sostituite con due valori separati in un file.
matt

I collegamenti alle immagini sono interrotti, hai qualche possibilità di risolverli in qualche modo?
Bobby,

2

È meglio eseguire Trova e sostituisci due volte, perché si verificano due sostituzioni diverse. Tuttavia, ci dovrebbero essere pochissimi compromessi nel tempo di elaborazione. Considera quanto segue:

Esegui Trova e sostituisci una volta, cercando termini per termini:

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

Ai fini della corsa, supponiamo che sia lineare e diciamo che questo funziona in tempo O (n).

Vuoi trovare due termini diversi. Eseguendo Trova e sostituisci due volte appare come:

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

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

che richiederebbe O (2x1n) tempo, o il doppio della ricerca di un termine.

La ricerca di due termini con due sostituzioni sarebbe teoricamente simile a:

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

Ottenere i termini non richiede molta potenza di elaborazione, quindi essenzialmente stai cercando due serie di ricerche per ogni termine, dando un tempo di O (1x2n), eseguendo una volta ma cercando due termini.

Mentre risparmieresti un po 'di tempo non caricando ogni termine due volte, passeresti più tempo a cercare ogni termine due volte, quindi c'è poco compromesso e poiché questa funzionalità sarebbe usata meno spesso della ricerca di un termine con un solo sostituto, gli sviluppatori di applicazioni presumono semplicemente di non scrivere quella funzionalità.

DISCLAIMER AI PROGRAMMATORI: questo è un esempio generalizzato. So che è meglio, ma sto cercando di mostrare perché questa funzione non è stata trovata.


0

Il supporto per le espressioni regolari in Notepad ++ è fortemente limitato. Senza l'operatore di alternanza, non c'è speranza nemmeno di avvicinarsi a ciò che si desidera fare. Dovrai usare sedun editor che abbia un supporto regex migliore.

Le estensioni GNU comunemente usate nella sintassi delle espressioni regolari includono:

  • il ? operatore, che significa zero o unico nel suo genere;
  • il | operatore alternanza ("foo | bar" corrisponde a "foo" o "bar")
  • modificatori come / g per avidi o / i per maiuscole e minuscole;
  • {a, b} per indicare tra i token a e b di un tipo.
  • (modello) + per creare una o più partite dello stesso modello

Il componente Scitilla, che è alla base di Notepad ++, è strettamente compatibile con POSIX e non riconosce queste estensioni. Puoi consultare le espressioni regolari per una carrellata completa e alcuni esempi

fonte

Guarda anche

GNUWin32 sedper Windows


0

Uso TextCrawler per la ricerca e la sostituzione in batch. (Uso Notepad ++ per una singola ricerca / sostituzione su più file poiché è più veloce di Textcrawler.) TextCrawler supporta le espressioni regolari e la normale ricerca / ricerca. I file batch possono essere salvati e ricaricati per uso futuro.


Per favore, vedi Come posso raccomandare il software nelle mie risposte? In particolare, come minimo, dire dove ottenere il software.
G-Man dice "Ripristina Monica" il

La funzione batch è disponibile solo nella versione Pro non gratuita di TextCrawler.
Hobbes,

0

Inoltre può essere fatto utilizzando il plug-in ActiveX (per Notepad ++) ed eseguendo script personalizzati:

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

Funziona, ma nota che a causa di un bug corrente nel plugin ActiveX un carattere NULL viene aggiunto al file ogni volta che esegui lo script.
Aidan,

-1

Funziona con tutti i numeri (per rimuovere tutti i numeri dal testo / articolo)

  1. Premi Ctrl + H per aprire la finestra di dialogo Trova e sostituisci.

  2. Nella casella "Trova cosa", digitare ^ #

  3. Lascia vuota la casella "Sostituisci con".

  4. Sostituisci tutto.


1
L'OP non vuole solo rimuovere i numeri, ma vogliono sostituirli con una lettera.
Booyaa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.