使用 Windows shell 或 Perl 脚本搜索和替换字符串

Search and replace a string using Windows shell or Perl script

如何搜索 //packages/thirdparty/release/main.txt #10 并使用批处理命令将 #10 替换为 #15(设置 VARIABLE="#15")并忽略空格#10 可以是任何东西,假设 #XXX.

testlog.txt

   //packages/thirdparty/release/config.txt                    #8
   //packages/thirdparty/release/config2.txt   #3
   //packages/thirdparty/release/config1.txt    #4
   //packages/thirdparty/release/main.txt            #10

这是我的尝试

@ECHO OFF
set $FindStr=//packages/thirdparty/release/main.txt#10
set $ReplString=//packages/thirdparty/release/main.txt#15

setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type testlog.txt') do (
   set $Ver=%%a
   set $Ver=!$Ver: =!
   If /i !$Ver!==%$FindStr% set $Ver=%$ReplString%
   echo !$Ver! ) >> testlog.txt

你可以使用一行 Perl:

perl -pe"s!(//packages/thirdparty/release/main.txt *)#\d+!#15!;" testlog.txt 

#10 替换为 #15

我不确定你所说的 "ignoring spaces" 是什么意思。我假设它们在原始文件中,所以你不能忽略它们。

在 Perl 单行代码中,这会保留 #99 字段之前的所有空格,并将其更改为 #15.

perl -pe"s|//packages/thirdparty/release/main.txt\s*\K#\d+|#15|" testlog.txt

\K ("keep") 构造需要 Perl 5 版本 10 或更高版本。如果您有较早的版本并且无法更新,那么您可以使用捕获和替换来代替,如下所示

perl -pe"s|(//packages/thirdparty/release/main.txt\s*)#\d+|#15|" testlog.txt