如何用PowerShell提取文件中括号内的指定字符串(非整行)?
问题描述
现有一文件,内容包含多组位于括号内的国家名称字符串,文件内容示例如下:
This (USA) is a bad text (France) with countries (Luxembourg) between () (Germany) Whith multiple (Luxembourg) countries (USA) per line and some lines without countries To search (France) and find (Belgique) duplicate countries (USA)
需求是提取所有括号内的国家名称,每个名称单独显示一行,预期输出如下:
USA France Luxembourg Germany Luxembourg USA France Belgique USA
在BS2000大型机上使用BS2EDT编辑器的解决方案为:
list-string /(?<=\()[^)]+(?=\))/,from=lettre.pays.txt
请问使用PowerShell实现该需求的最简方案是什么?
PowerShell最简解决方案
直接执行以下命令即可:
Select-String -Path lettre.pays.txt -Pattern '\(([^)]+)\)' -AllMatches | ForEach-Object { $_.Matches } | ForEach-Object { $_.Groups[1].Value }
命令说明:
Select-String:读取目标文件并通过正则匹配内容,-AllMatches参数确保提取每行中的所有匹配项(而非仅第一个)- 正则表达式
\(([^)]+)\):精准匹配被括号包裹的内容,其中([^)]+)专门捕获括号内的国家名称(排除括号本身) - 连续两个
ForEach-Object:先展开所有匹配结果,再逐个提取捕获到的国家名称,最终输出每行一个名称的格式
内容的提问来源于stack exchange,提问作者schlebe
相关产品推荐
相关产品推荐

