Powershell捕获组 - 在匹配行后插入一些文本

时间:2013-02-03 02:25:13

标签: regex powershell replace

我正在尝试将一个包含powershell语句的行插入到多个脚本文件中。

文件内容如下(3例)

"param($installPath)"

- 没有CRLF字符,只有第一行

"param($installPath)`r`n`"        

- 使用CRLF字符,没有第二行

"param($installPath)`r`n`some text on the second line"

- 使用CRLF字符,非空第2行

我想插入一些文本(第二行'r'n$myvar = somethingelse中的poweshell语句),因此如果它们不存在,它会紧接在第一行附加'r'字符到第一行< /强>

"param($installPath)`r`nmyvar = somethingelse"

- 首先将CRLF字符添加到第1行,并在第2行添加$ myvar = somethingelse

"param($installPath)`r`n`$myvar = somethingelse"

- 仅在第二行添加“$ myvar = somethingelse”,因为CRLF已存在(无需添加结尾r n)

"param($installPath)`r`n`$myvar = somethingelse`r`n`some text on the second line"**

- 在第二行添加“$ myvar = somethingelse'r'n”(第一行已存在CRLF)和APPEND CRLF,因此第二行的现有文本将移至第3行。

我试图使用这个正则表达式: “^ param(。+)(?:( r n ))" and this replacement, but with no success ($1 is the first capture group, $2 is non capture group which I ignore even if something is found and I explicitly add CRLF after $1 capture group) "$1 r n myvar = somethingelse”

谢谢,

Rad公司

1 个答案:

答案 0 :(得分:1)

-replace的以下用法似乎符合您的要求

$content = "param(some/path)"
#$content = "param(some/path)`r`n"  
#$content = "param(some/path)`r`n`some text on the second line"

$content = $content -replace "^(param\(.+\))(?:\r\n$)?",
        ( '$1' + "`r`nmyvar = somethingelse" )

Write-Host "`n$content"

请注意,对捕获组的引用必须使用单引号。

可选的,未捕获的(?:\r\n$)组确保在没有任何内容(即字符串$的结尾)之后删除CRLF。

修改

如果param后面的内容未知,则可以使用以下正则表达式 它使用[^\r\n]来捕获不是换行符的字符。

"^(param[^\r\n]*)(?:\r\n$)?"