我是新手Perl腳本編寫,但我需要做大量的正則表達式查找和替換跨越數百個文件。perl找到並替換刪除文件
我遇到了this website,它推薦使用Perl命令perl -p -i -e 's/oldstring/newstring/g' *
來獲取所有文件,然後perl -p -i -e 's/oldstring/newstring/g' 'find ./ -name *.html\'
將其過濾到某些文件。
我的目標是找到所有* .csproj和* .vbproj文件,並將對.dll的引用替換爲新路徑。
這些都是XML文件類型。
我替換文本是
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
與
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<Private>True</Private>
<HintPath>..\..\..\..\ExternalDLLs\log4net.dll</HintPath>
</Reference>
我的命令到目前爲止
perl -p -i -e 's/<Reference Include="log4net, (?:.*?[\t\s\n\r])*?<\/Reference>/<Reference Include="log4net, Version=1\.2\.10\.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"><SpecificVersion>False<\/SpecificVersion><Private>True<\/Private><HintPath>\.\.\\\.\.\\\.\.\\\.\.\\ExternalDLLs\\log4net\.dll<\/HintPath><\/Reference>/g' `find . -type f \(-name "*.vbproj" -or -name "*.csproj" \)`
這似乎嘗試和工作,但它只是最後刪除我的所有* .vbproj和* .csproj文件。
我找不出爲什麼我的腳本正在刪除文件。
任何幫助?
編輯:它打印了這一點每個文件
Can't do inplace edit on ./Middletier/TDevAccess/AmCad.Components.TDevAccess.csproj: No such file or directory.
編輯2:IM使用bash在Ubuntu在Windows上,如果該事項
能this有關?
我還沒有運行過這個功能,但是從快速瀏覽看來,它看起來像是在查找一個XML標籤'Reference',並添加了子項'HintPath'和'Private',是否正確?如果是這樣,我該如何限制它以查找具有設置爲特定值的屬性的標籤? –
即:具有'Include =「log4net,版本= 1.2.10.0 ...' –
的'Reference'標記足夠容易,忍受着我,我會更新這個例子http://xmltwig.org/xmltwig/quick_ref html的 – Sobrique