在一个包含100行代码的XML文件中,有一个具有特定模式的字符串,我想找到该字符串并将其写入新的文本文件。
该字符串包含的内容是未知的并且可以变化,但是模式是相同的。例如:
12hi34
99ok45
这些元素的共同点是长度为6和元素:
0-1:整数
2-3:个字符
4-5:整数
是否可以使用Powershell编写脚本来找到适合模式的字符串并将其导出到文本文件中?
我是Powershell和脚本的新手。尝试过Google的问题,偶然发现了Select-String,但这不能解决我的问题。希望你们中的一些人可以在这里指导我。谢谢。
编辑:该字符串作为某些“自由文本”位于根元素之外。它不是传统的XML文件。
答案 0 :(得分:0)
尝试一下...
$f = Get-Content '<xml-file>' -ReadCount 0
foreach ($l in $f) {
if ($l -match '[0-9]{1,3}[a-zA-Z]{2,3}[0-9]{1,5}') {
Write-Output $matches.0
}
}
将文件内容填充到变量中。遍历文件的每一行。按模式解析值。
这里是匹配件的样本...
答案 1 :(得分:0)
假设文件中只包含一个一个标记,并且字母仅限于英文字母'a'到'z':
(Get-Content -Raw in.xml) -replace '(?s).*(\d{2}[a-z]{2}\d{2}).*', '$1' > out.txt
注意:
如果找不到匹配的令牌,则将输入文件的全部内容写入out.txt
。
在Windows PowerShell >
上默认情况下会生成UTF-16LE(“ Unicode”)文件(在PowerShell Core 中为无BOM的UTF-8);通过管道传递到Set-Content out.txt -Encoding ...
来创建具有不同编码的文件。
Get-Content -Raw
以单个字符串读取整个输入文件。
-replace
运算符使用regular expressions(正则表达式)进行匹配-有关更多信息,请参见this answer。
(?s)
也使.
匹配换行符。-creplace
进行区分大小写的 匹配。