【问题标题】:Search and delete some lines in ps1 file搜索并删除 ps1 文件中的某些行
【发布时间】:2013-09-23 20:21:38
【问题描述】:

我正在从共享中复制一个文件,我正在尝试搜索一行代码,然后删除一些代码行,然后以相同的名称再次保存该文件。

假设我在 myconfig.ps1 文件中有以下内容

WriteHost("My operations");
WriteHost("My Object Creation");
$mytmp.NewObjectCreation($myobj1);
$mytmp2.NewObjectCreation($myobj2);
WriteHost("My Object Creationcompleted");
WriteHost("My operations completed");

输出文件应与原始文件同名,即 myconfig.ps1,内容如下

WriteHost("My operations");
WriteHost("My Object Creation");
WriteHost("My Object Creationcompleted");
WriteHost("My operations completed");

我在下面尝试了一种说法,但它不起作用:

$s1 = [regex]::escape("$mytmp.NewObjectCreation($myobj1);")
$c1 = [regex]::escape("#$mytmp.NewObjectCreation($myobj1);")


Get-Content $originalbuildspecfile | ForEach-Object {
    $_ - $s1, $c1 
    } | Set-Content ($originalbuildspecfile )

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用get-content 读取文件的内容,将每一行在某些条件下通过管道传输到where-object,然后使用set-content 再次保存。 如果你想写入你正在读取的同一个文件,你必须将内容保存在一个变量中,否则你会得到一个错误,说文件已经被使用了。

    例如:

    PS> $file = "c:\temp\myconfig.ps1"
    PS> $content = get-content $file | where {-not $_.StartsWith('$') }
    PS> set-content $file -Value $content
    

    本示例将检查“myconfig.ps1”中的每一行,并仅将不以“$”开头的行放入变量$content。 第三行将采用存储在$content 中的值并将其放入'myconfig.ps1'。

    请注意,如果您的源文件位置与目标文件位置不同,您可以在一行中执行此操作,如下所示:

    PS> get-content "c:\temp\myconfig.ps1" | where {-not $_.StartsWith('$') } | set-content "c:\other_location\myconfig.ps1"
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多