質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

2277閲覧

PowerShellで文字列を置換したい

oru

総合スコア5

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2020/02/14 07:14

編集2020/02/14 07:19

前提・実現したいこと

テキストファイルがAとBの二つあり、ファイルAの数字部分をファイルBの数字+文字列部分で置換したい。

ファイルA(不規則かつ、間に行を挟んで並んでいる)
"num": 1
鳴き声
"num": 17
鳴き声
"num": 4
鳴き声
"num": 105
鳴き声

ファイルB(行頭の数字が少ない方から並んでいる)
1いぬ
4ねこ
17とり
105さかな

実現したい状態(並び順はファイルAと同じだが、行末にファイルBの文字を含む)
"num": 1いぬ
鳴き声
"num": 17とり
鳴き声
"num": 4ねこ
鳴き声
"num": 105さかな
鳴き声

発生している問題・エラーメッセージ

ファイルAの置換したい部分は取得できたが、ファイルBの数字+文字列部分で置換する方法が分からない。

該当のソースコード

PowerShell

1Select-String -Path $fileA -Pattern '"num":\s\d{1,}' -AllMatches -Encoding default -Context 0 | ForEach-Object { $_.Matches } | ForEach-Object { $_.Value }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/02/14 07:27

まず B を全て読み込み、置換前と置換後の文字列を作ります。 置換前の文字列の最後に $ をつければ行末にのその文字列にマッチする正規表現になります。 あとはファイル A を一行ずつ読み込んで置換して出力するだけです。
oru

2020/02/14 07:29

返信ありがとうございます。早速試してみます。
guest

回答1

0

ベストアンサー

こうですかね。
[RegEx]::Replaceを利用することで正規表現に一致した文字をもとにコードを実行して、その結果を置換後の文字にできます。

powershell

1# 数値と動物の対応をつくる 2$animalHash = @{} 3Get-Content -Encoding utf8 FileB.txt | 4% { 5 $_ -match "^\d+" | Out-Null 6 $animalHash[$Matches[0]] = $_ 7} 8 9# 対応がちゃんとできてるか確認 10$animalHash[ "4" ] # →4ねこ 11 12# 正規表現に一致した文字について、一致した内容をもとに置換をする 13$result = Get-Content -Encoding utf8 FileA.txt | 14%{ 15 [RegEx]::Replace($_, '"num":\s(\d{1,})', { $keyNum = $args.groups[1].tostring(); return '"num": ' + $animalHash[ $keyNum ] }) 16} 17 18# 結果を保存 19$result | Set-Content -Encoding utf8 FileA_Replaced.txt

投稿2020/02/14 08:28

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oru

2020/02/14 08:38

コードまで...回答ありがとうございます。 思い描いていた通りの動作でしたので、ベストアンサーにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問