我正在尝试将一个包含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公司
答案 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$)?"