我想把一个文本文件拆分成几个文件,方法是用一个特定的字符串来确定每个文件的开头和结尾。第一个文件的开头可以用"<ca>"
行来标识,结尾可以用"</ca>"
行来标识。现在我想把这两个字符串之间的内容剪切并粘贴到一个新的文本文件中。到目前为止,我已经编写了以下代码:
$content = Get-Content .\*.txt
{
if ($f -eq "</ca>") { $c > .\file.txt; }
if ($f -ne "<ca>" -and $f -ne "</ca>") { $c += $f }
}
第二个“if”用于从创建的文件中删除“标识字符串”。
我遇到了两个问题:
- 我只能选择文本的结尾
- 源文件中的所有段落都不在了,新文件只包含一行内容
该文件是一个VPN配置,如下所示:
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>
输出如下所示:
clientdev tunproto udpremote 448verify-x509-name<ca>Certificate:...
型
(and等等)
3条答案
按热度按时间7rtdyuoh1#
你最好用多行正则表达式来做这件事。
确保在像这样使用Regex时使用
-Raw
。gojuced72#
将文件作为单个字符串读取,并使用正则表达式匹配来提取CA证书:
在PowerShell v3之前,使用
Get-Content | Out-String
将文件内容作为单个字符串获取。8xiog9wr3#
一个在Powershell上按搜索字符串拆分文件的行。
按内容字符串拆分文件,在Powershell中运行:
$i=0;(gc Testfile.txt -raw) -split '#'|%{$i++;sc Testfile$i.txt -value $_}
本例将Testfile.txt拆分为多个文件,每个文件的编号递增,如Testfile1.txt、Testfile2.txt等,只要在原始文件中找到字符串“#”,“#”-也会在此过程中删除。
非常有用,我发现它在互联网上,并决定分享它.