0

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

文件的内容是这样的(3例)

"param($installPath)"

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

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

- 带有 CRLF 字符,没有第二行

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

- 带有 CRLF 字符,第二行非空

我想插入一些文本(第二行中的 poweshell 语句'r'n$myvar = somethingelse),因此它就在第一行的下方,如果它们不存在,则将 'r'n 字符附加到第一行

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

- 首先在第一行添加 CRLF 字符,在第二行添加 $myvar = somethingelse

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

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

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

- 在第二行添加“$myvar = somethingelse'r'n”(CRLF 已经存在于第一行)并将 CRLF 附加到它,以便第二行上的现有文本将移至第三行。

我试图使用这个正则表达式:“^param(.+)(?:( rn ))" 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) "$1r nmyvar = somethingelse”

谢谢,

辐射

4

1 回答 1

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 被删除,如果没有任何内容,即 string 的结尾$,跟随它。

编辑

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

"^(param[^\r\n]*)(?:\r\n$)?"
于 2013-02-03T13:02:35.773 回答