Заменить символы (альтернатива SED), используя командный файл - PullRequest
0 голосов
/ 23 мая 2018

Я хочу заменить все , в текстовом файле на . через пакет.

На самом деле мне просто нужна альтернатива для этой команды

sed.exe "s/,/./g" $clearances.txt$ > $clearance_out.txt$

Проблема в sed.exe установлен не на каждом ПК, на котором я хочу его использовать, поэтому я планирую прочитать и заменить стандартным редактором блокнота из Windows.

Кто-нибудь знает, как?

Пример для clearances.txt:

-12,7
-5,6
-7,6
-3,9

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Вы можете использовать PowerShell вместо sed.

Из пакетного файла:

@PowerShell "(GC .\clearances.txt)|%%{$_ -Replace ',','.'}|SC .\clearances.txt"

В командной строке

PowerShell "(GC .\clearances.txt)|%{$_ -Replace ',','.'}|SC .\clearances.txt"
0 голосов
/ 23 мая 2018

Вы можете сделать это следующим образом (используя пакетный файл, эквивалентный вашему sed):

Назовите файл replace_string.bat

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set "search=,"
    set "replace=."

    set "textFile=clearances.txt"

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )

Сначала мы хотим убедиться в задержкерасширение отключено (чтобы магия for работала).Затем установите переменные для поиска и в файле.

Затем в цикле я использую type для отображения содержимого файла.Затем ^ используется для экранирования & (run first command and then second) и > (перенаправление).

Затем сохраните переменную цикла %%i (двойное значение %% существует из-за того, что мы находимся в пакетеfile) в переменную line, чтобы мы могли ее использовать.Тогда нам нужно enable delayedexpansion, чтобы мы могли использовать !...!.

Хитрая часть - echo(!line:%search%=%replace%!.

echo( обычно печатает пустую строку.Здесь вам нужно иметь его для line расширения переменной.Без него вы бы получили что-то вроде:

'line:' не распознается как внутренняя или внешняя команда

Так что мы там, где мы есть (благодаря расширению)12,7:,=., что приводит к окончательному результату 12.7

...