bloomer_xx
bloomer_xx

Reputation: 51

Replacing characters from multiple files with regex and Powershell

I would like to change _ to - in all .md files from folder FOO. The code below does what I need but I don't how to save results in folder FOO or some other...

$mdfiles = gci *.md
gc $mdfiles | ForEach-Object {if ( $_ -match '^!') {$_ -replace '_', '-'} else {$_}} | out-file ...

Upvotes: 0

Views: 48

Answers (1)

lit
lit

Reputation: 16236

A ForEach-Object is needed to iterate over the file names as well. Ternary expressions are in PowerShell Core, but I am not sure about Windows PowerShell. This is not tested, but might give a start.

Get-ChildItem -File -Path '.' -Filter '*.md' |
    ForEach-Object {
        $OutFile = ".\foo\$($_.Name)"
        Get-Content -Path $_.FullName |
            ForEach-Object { ($_ -match '^!') ? ($_ -replace '_','-') : ($_) } |
            Out-File -FilePath $OutFile
    }

Also, it is bad practice to use alias commands in a stored script.

Upvotes: 1

Related Questions