windows - Sådan indsættes komma før sidste men en og sidste ord i alle linjer af en fil?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil have et batch script til at indsætte komma tilbage til sidste men et ord og mellem sidste men et ord og sidste ord i alle linjer af en fil. Kommasterne skal erstatte mellemrummene mellem ordene.


F.eks. testfil:


This is first line
This is the second line
Check Subsystem version 3.1.8-11P


Jeg vil gerne se, at produktionen ser ud:


This is,first,line
This is the,second,line
Check Subsystem,version,3.1.8-11P


Dette script indfører komma inden sidste ord, men jeg har en linje imellem med & og dens sletning af linjen med & symbol i det.


F.eks. Opret & Slet version 1.1.1


Denne linje bliver slettet.


@echo off
for /f usebackq^ delims^=^ eol^= \%\%A in ("Doc.txt") do (
    set "s=\%\%A"
    set "s1=\%\%A"
    setlocal enableDelayedExpansion
    set "s=!s:@=@a!"
    set "s=!s:=@b!"
    set "s=!s:/=@f!"
    set "s=!s:.=@d!"
    set "s=!s: =.!"
    for /f "delims=" \%\%A in (".!s!") do (
        endlocal
        set "s=\%\%~xA"
        setlocal enableDelayedExpansion
        if defined s (
            set "s=!s:.= !"
            set "s=!s:@d=.!"
            set "s=!s:@f=/!"
            set "s=!s:@b=!"
            set "s=!s:@a=@!"
            set "s=!s:~1!"
            call set s2=\%\%s1:!s!=\%\%
            echo !s2!,!s! >> output.txt
        )
        endlocal
    )
)
pause


Og også jeg er ikke sikker på, hvordan man indsætter komma tilbage til sidste, men et ord.

Bedste reference


Dette kan gøres nemt med ethvert tekstredigeringsprogram, der understøtter regulære udtryk ved at søge efter

W+(w+)W+(w+)$ og bruger som erstatningsstreng ,$1,$2.


Hvordan kan du finde og erstatte tekst i en fil ved hjælp af kommandolinjemiljøet i Windows? indeholder i et svar linket til den nyeste version af JREPL.BAT skrevet af Dave Benham , som gør det muligt at foretage denne ændring på filen ved hjælp af den almindelige ekspressionssøgning og erstatte strenge. [36]


Til brug af JREPL.BAT fra en batchfil med denne ekstra batchfil i samme mappe som den udførte batchfil:


call "\%~dp0jrepl.bat" "W+(w+)W+(w+)$" ",$1,$2" /F "\%~1" /O -


"\%~1" henviser her i denne generiske kommandolinje til navnet på den fil, der skal ændres.


Kør jrepl.bat /? for at få hjælp til de andre muligheder, der bruges her.


Kør call /? for at få hjælp til denne kommando og forklaring af \%~dp0 (drev og bane i den nuværende batchfil, der slutter med en tilbageslag).


Forklaring af det regulære udtryk erstatter:



  • W+ ... find 1 eller flere ikke-ord -karakter i henhold til Unicode-standarden.

  • (w+) ... find 1 eller flere ord -karakter i henhold til Unicode-standarden og markér den fundne streng til back-reference i erstatningsstreng med $1.

  • W+ ... igen 1 eller flere ikke-ord tegn i henhold til Unicode-standarden.

  • (w+) ... find igen 1 eller flere ord tegn i henhold til Unicode-standarden og marker den fundne streng til back-reference i erstatningsstrengen med $2.

  • $ ... søgeudtryk resulterer kun i en positiv match, hvis de to ord kunne findes i slutningen af ​​en linje, hvorved de nye linjetegn ikke matches.






For en linje som


Check Subsystem version 3.1.8-11P


som skal ændres til


Check Subsystem,version,3.1.8-11P


i filen er der brug for en anden regulær ekspresningsstreng på grund af . og - er nonword tegn i henhold til Unicode-standarden.


Søgestrengen skal ændres til: [^w.-]+([w.-]+)[^w.-]+([w.-]+)$


[ ... ] er positiv karakter klasse definition der matcher ethvert tegn angivet inden for firkant parentes.


[^ ... ] er en definition af negativ tegnklasse, der matcher ethvert tegn ikke angivet inden for firkantede parenteser.


w er en speciel karakterklassedefinition for alle ord tegn i henhold til Unicode-standarden.


. indenfor firkantede parenteser af en positiv eller negativ karakter klasse definition er fortolket som bogstavelig karakter. Dot-karakteren vil have en særlig betydning i ordinære ekspressionssøgestrenge uden for en karakterklassedefinition. [37]


- inden for firkantede parenteser med en positiv eller negativ karakter klasses definition betyder alle tegn fra tegn X angivet til venstre til - til tegn Y angivet ret til - i henhold til kodeværdierne for tegnene X og Y. Linjen er også fortolket som bogstavkarakter, hvis der ikke er tegn på venstre eller højre til - inde i karakterklasset definitionen. Det er dog tilrådeligt at undslippe - med en tilbageslag i en karakterklassedeposition uafhængig af dens position inden parentesen, når bindestregkarakteren skal tolkes som bogstavkarakter. Udenfor en tegnklasse definition har bindestregskarakteren ingen særlig betydning. [38]


Så hele kommandolinjen til brug for en fil, der indeholder strenge med prik og bindestreg, som skal fortolkes som 'ord' er:


call "\%~dp0jrepl.bat" "[^w.-]+([w.-]+)[^w.-]+([w.-]+)$" ",$1,$2" /F "\%~1" /O -