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

时间:2015-03-10 18:55:38

标签: perl search cmd

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

2 个答案:

答案 0 :(得分:3)

我不确定"忽略空格" 是什么意思。我假设它们在原始文件中,因此您无法忽略它们。

在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+|$1#15|" testlog.txt

答案 1 :(得分:2)

您可以使用一行Perl:

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

#10替换为#15