首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于查找和替换多个文件中多行字符串的powershell/cmd命令

用于查找和替换多个文件中多行字符串的powershell/cmd命令
EN

Stack Overflow用户
提问于 2012-12-14 23:55:26
回答 3查看 2.9K关注 0票数 2

我以前从来没有使用过powershell,谷歌也没有给我确切的答案。我希望你们能帮助我。我需要找到目录(包括子目录)中包含2行的所有文件:

代码语言:javascript
运行
复制
aaa aaa
bbb bbb

并将第二行替换为ccc

如果行bbb bbb没有紧跟在aaa aaa之后,就不应该进行替换。

这是我到目前为止所知道的:

代码语言:javascript
运行
复制
$line3 = "aaa[ ]*aaa[ ]*bbb[ ]*bbb"
Get-ChildItem -exclude *.bak -recurse *.txt | Where-Object {$_.Attributes -ne "Directory"} |
    ForEach-Object { 
        Copy-Item $_ "$($_).bak"; 
        $wholeFile = [IO.File]::ReadAllText("$_");
        $wholeFile = $wholeFile.replace("`n", " ");
        $wholeFile = $wholeFile.replace("`r", " ");
        $temp3 = $wholeFile | Select-String -pattern $line3 -quiet;
        if(($temp3 -eq "True")){
            (Get-Content $_)  -replace "bbb[ ]*bbb", "ccc" | Set-Content -path $_;
        }
        else{
            echo failed
        }
    }

我认为这个代码几乎可以工作,除非文件有两次"bbb bbb":一次紧跟在"aaa aaa“之后,另一次没有"aaa aaa”。这两行都会被替换,我只需要第一行是replaced.Is,有什么方法可以修复它吗?有更多经验的人能告诉我我是否遗漏了什么吗?有没有更简单/更短的解决方案来满足我的需求?我在powershell中见过很多整洁的单行解决方案。我的案子有没有类似的东西?谢谢

EN

Stack Overflow用户

发布于 2012-12-15 00:58:56

这是一个批处理解决方案:)

代码语言:javascript
运行
复制
@echo off
setlocal enabledelayedexpansion
cd C:\folder
set aaa=false
for /r C:\folder %%a in (*) do (
for /f "tokens=1,2 delims= " %%x in (%%a) do (
if "!aaa!"=="true" (
if "%%x"=="bbb" if "%%y"=="bbb" (
echo ccc ccc >>temp.txt
del %%a /f /q
ren temp.txt %%~nxa
set aaa=false
)
) else (
if "%%x"=="aaa" if "%%y"=="aaa" set aaa=true
echo %%x %%y >>temp.txt
)
)
)
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13882047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档