2016-08-23 8 views
1

毎週複数のファイルで特定の文字列を置き換える必要があります。毎週複数のファイルから文字列を置換する

extract_mdp_staging_error(149); 

他のファイルが同じように見えるが、文字列は、exのために異なっている:私は、次のPowerShellさ交換しなければならないラインを使用してそのプロセスを簡素化しようとしていました。

extract_kdp_staging(149); 
extract_zub_staging_error(149); 
... 

()内のテキスト部分を検索してユーザー入力に置き換えるだけの方法はありますか?来週からハードコードされた検索を使用することはできません。なぜなら、149でなく150などであるからです。

EDIT は、私は別のアプリケーションのためのPowerShellを使用してファイル内の行全体を置き換えるために、スクリプトを使用してきたが、私はそれをコーディングする方法を見つけ出すことができなかったので、それだけでカッコ内の一部を置き換えます。 PowerShellのスクリプト:

Get-ChildItem C:\Users\mosermich\Desktop\Extractor\Ressources -Filter '*.sql' -ErrorAction Stop | ForEach-Object { 
     $content = Get-Content $_.Fullname 
     $content[7] = ' rel.nr sqlldr {0}' -f $releasenr 
     $content | Set-Content -Path $_.FullName 
     } 

そして、ここでは、私が(に番号を交換する必要があるだろうしたファイルの1つです)2行目:

begin 
extract_zdlb_staging(149); 
commit; 
end; 
/
quit; 
+0

これは、正規表現を使ってなんとかする必要があります。例はありますか? – Jakodns

+0

申し訳ありません私は本当に正規表現で働いたことはありません。しかし、私は過去のpowershellスクリプトと、それを置き換える必要があるサンプルファイルを投稿しました。うまくいけば、これはあなたが意味するものです。 –

答えて

2

私は肯定的でregexを使用します先読みと後読み:

$userInput = 250 
$filePath = 'yourFilePath' 

$content = Get-Content $filePath 
$content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $filePath 

正規表現:

(?<=\()(\d+)(?=\)) 

Regular expression visualization


編集:ここでは あなたの例に採用されたスクリプト:

$userInput = 250 # The number you want to put in the parentheses 
Get-ChildItem C:\Users\mosermich\Desktop\Extractor\Ressources -Filter '*.sql' -ErrorAction Stop | 
    ForEach-Object { 
     $content = Get-Content $_.Fullname 
     $content -replace '(?<=\()(\d+)(?=\))', $userInput | Set-Content $_.Fullname 
    } 
+0

速い答えと説明をありがとう! (あなたは私のPowerShellの問題で、ここ数日、私をかなり助けてくれました)。私が正規表現を使用する場合、実際には()の数字にしか影響しませんが、新しい数字を内部に挿入しません。何か間違っているのですか? –

+0

あなたは歓迎です:-)。私の最初のスクリプトを実行すると、それはカッコ内に250を入れないのですか? –

+0

私はそれを完全な新しいファイルで試し、それを管理者として実行しました。カッコ内の古い番号は削除されますが、新しい番号では埋められません。 –

関連する問題