PowerShell - 在另一个字符串后的下一行插入字符串到文本文件中

5
这似乎是一个简单的问题,但我无法理解它/找到相关帖子。
我正在尝试使用PowerShell修改文本(配置)文件。查找特定字符串(A)出现的位置,然后在下一行添加另一个字符串(B)。保留出现字符串(A)的行。
因此,问题是我无法进行简单的查找和替换,因为包含字符串(A)的行之后还有其他文本。
希望有比我聪明的人知道这个技巧。干杯

同样的问题在https://dev59.com/A3I-5IYBdhLWcg3wZ3cR,并且@Keith Hill提供了出色的答案。 - Nitesh
@David Brabant的答案更加简洁。 - Santhos
1个回答

4
# Let's say my file test.txt contains
# Line1
# Line2
# Line3
# Line4

$lines = Get-Content test.txt
$pos = [array]::indexof($lines, $lines -match "Line3") # Could use a regex here
$newLines = $lines[0..($pos -1)], "MyNewLine3", $lines[$pos..($lines.Length - 1)]

$newLines | Set-Content test.txt

注意,如果它是一个正则表达式并且匹配了更多的元素,则返回的索引为-1。在这种情况下,请使用($lines -match "myregex")[0]。 - Santhos
还要注意,如果文件中有空行并且调用未匹配任何行,则进行字符串匹配时将返回第一个空行的索引。 - JeffR
@Santhos 为什么这是一个正则表达式而不是 PowerShell 内置函数的匹配?也许在幕后它是正则表达式。 - Timo
使用换行符来构建字符串,所以是字符串连接符? - Timo
1
@Timo 没错,在这个背后是一个正则表达式。请参见 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-7.1#matching-operators - Santhos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接