使用powershell在多个文件中匹配模式之前插入空白行

时间:2018-01-12 02:00:30

标签: powershell powershell-v2.0 powershell-v3.0

要求在匹配的图案线

之前在多个文件中插入一个空行

考虑一个包含以下内容的文件 苹果 树 橙子 [水果] 红色 绿色

预期产量: 苹果 树 橙

[水果] 红色 绿色

尝试下面的代码。帮我弄清下面代码中的错误

$FileName = Get-ChildItem -Filter *.ini -Recurse
$Pattern = "\[Fruit]\"
[System.Collections.ArrayList]$file = Get-Content $FileName
$insert = @()

for ($i=0; $i -lt $file.count; $i++) {
  if ($file[$i] -match $pattern) {
    $insert += $i #Record the position of the line before this one
  }
}

#Now loop the recorded array positions and insert the new text
$insert | Sort-Object -Descending | ForEach-Object { $file.insert($_," ") }

Set-Content $FileName $file

以上代码对单个文件很好,但对于多个文件,文件内容重复

2 个答案:

答案 0 :(得分:1)

Re:如何使这个工作适用于多个文件...

$FileName = Get-ChildItem -Filter *.ini -Recurse

如果只有一个.ini文件,那么 $ FileName 将是一个文件。

使用通配符和-Recurse开关表示您希望找到多个文件;因此,此命令会将集合文件分配给 $ FileName 变量(即它将是一个数组)。

请注意,当您致电Get-Content时,您传递 $ FileName

[System.Collections.ArrayList]$file = Get-Content $FileName

$ FileName 是文件的集合/数组时,这不会起作用。

你需要做的是设置一个循环来执行你的"插入换行符"逻辑 foreach (提示提示)数组中的文件。现在再去看看那些PS教程......

答案 1 :(得分:0)

Regex character class

尽量花时间正确学习正则表达式

$Pattern = "\[Fruit\]"