0

powershell ステートメントを含む行を複数のスクリプト ファイルに挿入しようとしています。

ファイルの中身はこんな感じ(3ケース)

"param($installPath)"

- CRLF 文字なし、1 行目のみ

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

- CRLF 文字あり、2 行目なし

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

- CRLF 文字あり、空でない 2 行目

いくつかのテキスト (2 行目の poweshell ステートメント) を挿入したい'r'n$myvar = somethingelseので、最初の行のすぐ下に、存在しない場合は 'r'n 文字を最初の行に追加します

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

- 最初に 1 行目に CRLF 文字を追加し、2 行目に $myvar = somethingelse を追加します

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

- CRLF が既に存在するため、2 行目に「$myvar = somethingelse」を追加するだけです (末尾のrn を追加する必要はありません) 。

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

- 2 行目に "$myvar = somethingelse'r'n" を追加し (1 行目には既に CRLF が存在します)、それに APPEND CRLF を追加して、2 行目の既存のテキストが 3 行目に移動するようにします。

この正規表現を使用しようとしていました: "^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"

キャプチャ グループへの参照は、一重引用符で囲む必要があることに注意してください。

オプションの uncaptured(?:\r\n$)グループは、その後に何もない場合、つまり string の末尾がない場合に CRLF が削除されることを保証し$ます。

編集

何が続くかわからparamない場合は、代わりに次の正規表現を使用できます。改行ではない文字をキャプチャするため
に使用します。[^\r\n]

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