首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell在特定字符串上滑动文本文件

PowerShell在特定字符串上滑动文本文件
EN

Stack Overflow用户
提问于 2020-05-26 15:50:29
回答 1查看 146关注 0票数 0

我试图根据一个特定的字符串将一个大的文本文件分割成几个文件。每次我看到字符串ABCDE-3时,我都希望在一个新的文本文件中剪切并粘贴到该字符串的内容。我也想提取最后四个社会,姓和名。新的文本文件需要保存为first_name、last_name和社交网站的最后4个。

参见文本文件示例和一些初始代码。用Python做这件事会让我感觉更舒服,但是PowerShell是唯一的选择。

代码语言:javascript
复制
$my_text = Get-Content .\ab.txt
$ssn_pattern = '([0-8]\d{2})-(\d{2})-(\d{4})'
ForEach ($file in my_text)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-26 21:20:38

要获得社交网站的名字、姓氏和最后4位数字,您可以使用捕获组,并在组装文件名时使用这些组。

根据您的模式,只应将最后4位数字分组。

您可以使用模式以TO:开始匹配,并从下一行获取名称和数字的值。

然后,使用负前瞻(?!匹配不以ABCDE-3开头的所有行。

您可以调整模式和代码,以匹配您的确切文本。

代码语言:javascript
复制
(?m)^[^\S\r\n]+TO:.*\r?\n\s*ATTN:\s*[A-Z]{3} ([^,\r\n]+),[^\S\r\n]*(.+?)[^\S\r\n]*[0-8]\d{2}-\d{2}-(\d{4})(?:\r?\n(?![^\S\r\n]+ABCDE - 3).*)*\r?\n[^\S\r\n]+ABCDE - 3.*

Regex演示

我使用堆栈溢出帖子构造了一个代码片段,因此这可能会得到改进。它基本上是加载一个原始字符串,并得到所有的匹配。

然后循环遍历所有的匹配,并让组组装一个文件名,保存完整的匹配作为内容。

如果有包含空格的名称,并且不希望这些名称在文件名中,则可以用空字符串替换这些名称。

示例代码:

代码语言:javascript
复制
$my_text = Get-Content -Raw ./Documents/stack-overflow/powershell/ab.txt

$pattern = "(?m)^[^\S\r\n]+TO:.*\r?\n\s*ATTN:\s*[A-Z]{3} ([^,\r\n]+),[^\S\r\n]*(.+?)[^\S\r\n]*[0-8]\d{2}-\d{2}-(\d{4})(?:\r?\n(?![^\S\r\n]+ABCDE - 3).*)*\r?\n[^\S\r\n]+ABCDE - 3.*"
Select-String $pattern -input $my_text -AllMatches |
        ForEach-Object { $_.Matches } |
        ForEach-Object {
            $fileName = -join ($_.groups[2].Value, $_.groups[1].Value, $_.groups[3].Value)
            Write-Host $fileName
            Set-Content -Path "your-path-here/$fileName.txt" -Value $_.Value
        }

当我运行这个文件时,我得到了两个文件,每个匹配的内容如下:

代码语言:javascript
复制
MIOTTISAREMO2222.txt
MIOTTSANREMO1111.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62026167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档