我希望通过按特定字符串确定每个文件的开头和结尾,将文本文件拆分为多个文件。
第一个文件的开头可以通过行idx = mask.argmax(1)
idx[~mask[np.arange(len(idx)), idx]] = 0 # or invalid_val
标识,结尾可以通过"<ca>"
标识。现在我想在新文本文件中剪切并粘贴这两个字符串之间的内容。
到现在为止,我已经写了这段代码:
"</ca>"
第二个&#34; if&#34;应该删除&#34;标识字符串&#34;来自创建的文件。
我遇到了两个问题:
该文件是VPN-Configuration,如下所示:
$content = Get-Content .\*.txt
{
if ($f -eq "</ca>") { $c > .\file.txt; }
if ($f -ne "<ca>" -and $f -ne "</ca>") { $c += $f }
}
输出如下:
client
dev tun
proto udp
remote 448
verify-x509-name
<ca>
Certificate:
Data:
Version: 3 (0x2)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=de
-----BEGIN CERTIFICATE-----
MIICzDCCAjWgAwIBAgIJANfh65DfDF45GFSD
-----END CERTIFICATE-----
</ca>
<cert>
Certificate:
Data:
Version: 3 (0x2)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=de
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
AoGBAN/jBWwRnjNtxJ+bj3U5oKhYjfu33N2dGlM9x5un9YLm9k6pBzhvG
</key>
(依此类推)
答案 0 :(得分:1)
使用多行正则表达式进行此操作会更好。
Get-Content .\vpnconfig.txt -Raw | Select-String '(?sm)<ca>(.+)</ca>' | Select -Expand Matches | Select -First 1 -Expand Value
确保在使用此类正则表达式时使用-Raw
。
答案 1 :(得分:0)
将文件作为单个字符串读取,并使用正则表达式匹配来提取CA证书:
$config = Get-Content 'C:\path\to\your.ovpn' -Raw
if ($config -match '(?ms)<ca>(.*?)</ca>') {
$matches[1].Trim() | Set-Content 'ca.crt'
} else {
'No CA certificate found.'
}
在PowerShell v3之前,使用Get-Content | Out-String
将文件内容作为单个字符串。