使用批处理文件替换字符(替代 SED)

Replace characters, (alternative to SED), using a batch file

我想通过批处理将文本文件中的所有 , 替换为 .

实际上我只需要一个替代命令

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

问题是 sed.exe 并未安装在我想使用它的每台 PC 上,因此我打算阅读并替换为 Windows 中的标准记事本编辑器。

有人知道怎么做吗?

clearances.txt 示例:

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

您可以通过以下方式完成(使用与您的 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(双 %% 存在是因为我们在批处理文件中)保存到 line 变量中,以便我们可以使用它。然后我们需要 enable delayedexpansion 这样我们就可以使用 !...!.

棘手的部分是 echo(!line:%search%=%replace%!

echo( 通常打印空行。在这里您需要将它用于 line 变量扩展。没有它你会得到这样的东西:

'line:' is not recognized as an internal or external command

所以我们得到了(多亏了扩展)12,7:,=.,这导致了最终结果 12.7

您可以使用 PowerShell 而不是 sed

来自批处理文件:

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

在命令提示符下

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