使用 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
如何搜索 //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