使用powershell删除文本文件中特定位置的字符

i34xakig  于 2022-11-29  发布在  Shell
关注(0)|答案(1)|浏览(173)

我有一个文本文件,看起来像下面。

Domain Certificate
Valid from: Tue Jul 12 05:30:00 IST 2022 
Valid upto: Thu Jan 05 05:29:59 IST 2023
Subject Alternative Names
SAN: yahoo.com
SAN: tw.rd.yahoo.com
SAN: s.yimg.com
SAN: mbp.yimg.com

1st Intermediate Certificate
Valid from: Tue Oct 22 17:30:00 IST 2013 
Valid upto: Sun Oct 22 17:30:00 IST 2028

对于包含“Valid from”和“Valid up to”的每一行,我需要从特定位置删除字符,并以Valid from:2022年7月12日有效期至:2023年1月5日
我需要在文本文件中执行此操作。
此外,如果有人可以帮助修改包含SAN的所有行:和帮助在域名中添加引号,如SAN:“yahoo.com“

wwtsj6pe

wwtsj6pe1#

你可以使用带有-File参数的switch来读取你的文件,使用-Regex来匹配你想要更新的行,因为在那里你可以使用带有更多正则表达式的-replace操作符来更新那些行:

$newContent = switch -File .\path\to\file.txt -Regex {
    # if the line starts with `SAN`
    '^SAN' { $_ -replace '(?<=: )|$', '"' }
    # if the line starts with `Valid from or Valid upto`
    '^Valid(?: from| upto)' { $_ -replace '(?<=: )\w+\s(\w+)\s(\d+).+\s(\d+)', '$1 $2 $3' }
    # else, output the line as-is
    Default { $_ }
}

然后可以使用$newContent将其保存到一个新文件:

$newContent | Set-Content path\to\newFile.txt

相关问题