Come posso rimuovere gli spazi solo da una posizione specifica usando lo script batch


0

Ho una voce come di seguito nel mio file di input (input.txt):

mcolWarrant|||||||||        0||Forwarded||
mcolWarrant|||||||||        0||Forwarded||
mcolWarrant|||||||||        0||Forwarded||
mcolWarrant|AW000015|||||0A009919|388|MILTON KEYNES|     7000||

Voglio solo rimuovere gli spazi di prova prima "0" ( 0)e prima "7000"( 7000). Come posso farlo utilizzando gli script batch?

Risposte:


0

La tua domanda è molto imprecisa, quindi la mia risposta presuppone quanto segue:

  • Stai usando Windows
  • Ogni riga del tuo file contiene colonne delimitate da |
  • Vuoi rimuovere gli spazi iniziali da tutte le colonne
  • Si desidera utilizzare uno script batch di Windows

La modifica di file mediante script batch puri può essere molto difficile. Spesso ci sono semplici "soluzioni" che falliscono di fronte a situazioni comuni. Esistono quasi sempre delle soluzioni alternative, ma lo scipt batch risultante diventa spesso complicato e lento.

Ma esiste una potente utility ibrida JScript / batch chiamata REPL.BAT che può facilmente risolvere molti problemi di elaborazione del testo. REPL.BAT è puro script che verrà eseguito su qualsiasi macchina Windows da XP in poi. Esegue un'espressione regolare trova / sostituisci su stdin e scrive il risultato su stdout. È molto facile da usare, purché impari le espressioni regolari.

Un aspetto difficile del tuo problema è che gli spazi iniziali nella prima colonna non seguono il |delimitatore. Una soluzione adeguata deve gestire questo caso speciale.

I seguenti due comandi eseguiranno il tuo compito

type input.txt | repl "(^|\|) *" "$1" >input.txt.new
move /y "input.txt.new" "input.txt" >nul

Una semplice modifica all'espressione regolare le consentirà di eliminare gli spazi iniziali e finali da ciascuna colonna. Questa soluzione deve gestire il caso speciale in cui gli spazi finali non precedono un |delimitatore nell'ultima colonna.

type input.txt | repl "(^|\|) *| *($|\|)" "$1$2" >input.txt.new
move /y "input.txt.new" "input.txt" >nul
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.