如何使用Powershell读取txt文件中2个特殊字符之间的行

2024-01-24

嗨,我几乎是 Powershell 的新手。 我需要读取文本文件中的一些特定行并将它们放入不同的数组中。 我有一个如下所示的文件:

[Servers]
Server1
Server2
Server3
Server4
[IP]
10.10.10.10
10.10.10.20
10.10.30.30
192.168.1.2
192.168.1.4
[Path]
C:\Log\*.log
D:\Files\*.txt
D:\Files\*.csv
D:\Files\*.xml
[Gateway]
10.10.10.1
10.10.30.2
192.168.1.1

我的问题是我需要阅读以下几行[Servers](有时 3 行,有时更多)并将它们放入一个数组中。 如何选择之间的所有行[Servers] and [IP]当我不知道有多少行时?


Closely related: Grabbing specific sections of a txt file via Powershell https://stackoverflow.com/q/44958963/45375

如果可以先将整个文件读入内存:

$regex = '(?ms)\A.*?^\[Servers\]\s*\r?\n(.*?)(?:\r?\n\[.*|(?:\r?\n)?\Z)'
$servers = (Get-Content -Raw file.txt) -replace $regex, '$1' -split '\r?\n'

重构为一个简单的function接受输入文件和感兴趣部分的名称:

function get-SectionLines([string] $LiteralPath, [string] $SectionName) {
  $regex = '(?ms)\A.*?^\[{0}\]\s*\r?\n(.*?)(?:\r?\n\[.*|(?:\r?\n)?\Z)' -f [regex]::Escape($SectionName)
  (Get-Content -Raw -LiteralPath $LiteralPath) -replace $regex, '$1' -split '\r?\n'
}

$servers = get-SectionLines file.txt Servers

解释:

  • Get-Content -Raw将整个文件读入内存单串.
  • -replace然后使用 regex(正则表达式)对该多行字符串进行操作来匹配entire输入字符串,带有捕获组 ((...))仅匹配感兴趣的行,并仅用捕获组替换整个字符串,从而有效地仅返回该部分的行。
  • 最后,-split '\r?\n'将提取的多行字符串拆分为行数组。

正则表达式的解释:

  • 内联正则表达式选项(?sm)打开两个m多线和s单行选项:

    • m意思是^ and $匹配每个的开始和结束line而不是整个输入字符串。
    • s意味着元字符.火柴\n字符也是如此,这样的表达式.*可以用来匹配跨线.
  • \A匹配(多行)输入的开头,并且\Z最后。

  • \r?\n匹配单个换行符,包括 CRLF 和 LF 类型。

  • (.*?)是(非贪婪地)捕获该部分内所有内容的捕获组。

  • (?:\r?\n\[.*|(?:\r?\n)?\Z)使用非捕获组((?:...)) 匹配所有内容after感兴趣的部分,可以是next部分(换行符后跟[) or 输入文件的末尾(带或不带尾随换行符)。

  • 请注意,正则表达式匹配entire输入字符串,然后将其替换为在第一个(也是唯一的)捕获组中捕获的感兴趣的子字符串(范围)($1).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Powershell读取txt文件中2个特殊字符之间的行 的相关文章

  • PowerShell:如何在名称为“*”(星号/星号)的文件/文件夹上创建选择器?

    我需要从 PS 修改注册表 此注册表项与特定文件 所有扩展的文件夹 的上下文菜单相关 HKEY CURRENT USER Software Classes 目前我想将项目添加到此路径 HKCU Software classes shell
  • 使用 Powershell 添加 IIS 8.5 自定义日志记录字段

    带有 IIS 8 5 的 Windows Server 2012 R2 允许使用增强型日志记录自定义日志字段 http www iis net learn get started whats new in iis 85 enhanced l
  • powershell循环持续检查服务器是否启动

    我想运行一个脚本来检查 5 台服务器是否已启动并根据特定服务正在运行 如果该服务正在运行 那么我们就知道该服务器已启动并可访问 如果它没有回复 那么我希望它继续检查 这是我到目前为止得到的 Get Service LANMANSERVER
  • cURL 命令在 git bash 中有效,但在 cmd 和 powershell 中无效

    以下命令在 git bash 中有效 但在 cmd 和 powershell 中无效 curl X POST http localhost 5678 api findgen H Content Type application json d
  • 拖放到 Powershell 脚本

    我以为我已经找到了这个问题的答案 但我玩得越多 我就越发现它是 Powershell 的设计缺陷 我想拖放 或使用发送到机制 将多个文件和 或文件夹作为数组传递到 Powershell 脚本 测试脚本 Test ps1 param stri
  • “Microsoft.AspNet.Server.Kestrel”不包含适合入口点的静态“Main”方法

    我正在尝试运行最新的Asp Net 5 个示例 https github com aspnet Home 当前为 1 0 0 rc1 update1 来自 Windows 10 上的 powershell 我将活动和默认 DNX 设置为 C
  • 如何在 PowerShell 中将长命令拆分为多行

    如何在 PowerShell 中获取如下所示的命令并将其拆分为多行 C Program Files IIS Microsoft Web Deploy msdeploy exe verb sync source contentPath c w
  • 全局变量用例

    我有几个脚本和模块 它们使用全局变量来完成很多事情 我的日志记录可以采用以下三种形式之一 简洁 详细和验证 没有实际操作的详细日志记录 仅验证提供的数据 我还有许多函数 它们根据运行的上下文 用户或机器 而做出不同的响应 并且正在执行的操作
  • 相当于 UNIX diff 和 patch 的本机 PowerShell

    我需要潜在地修补文件作为脚本的一部分 为了使脚本所做的事情更具可读性 我想以类似于 UNIX diff 和 patch 方法的方式来实现它 在标准 UNIX 系统上 diff 可以生成特殊格式的文本文件 表示两个文件之间的差异 这可以与要修
  • PSExec 中的会话 ID

    Psexec 无法在远程会话上为我显示记事本 GUI 因此 我尝试获取会话 ID 如下所示 c Users Amitra Downloads PSTools gt PsExec u administrator p force 135 20
  • 如何获取管道对象的数量?我不想累积管道来缓冲

    假设我有一些 powershell 代码 function count pipe CmdletBinding param Parameter ValueFromPipeline true object inputObject process
  • 从输出中删除空行

    我有这个脚本 for true Write Host Get Date UFormat Y m d H M S ping n 1 10 10 50 203 Select String SimpleMatch Pinging Context
  • 使用 powershell 版本 2 查询 AD

    我们有由 Windows 7 和 Windows 10 组成的混合桌面操作系统 我有一个登录脚本 该脚本从每次用户登录时运行的 powershell 脚本收集各种信息 Windows 7 powershell 仅是版本 2 这意味着我无法使
  • 抑制数组列表添加方法管道输出

    我正在使用数组列表来构建日志项序列以供稍后记录 工作起来很不错 但是 Add 方法将当前索引发送到管道 我可以通过将其发送到 null 来解决这个问题 如下所示 strings Add junk gt null 但我想知道是否有某种机制可以
  • Get-AzureStorageBlob 抛出找不到您的 azure 存储凭据

    我刚刚开始使用 Azure 在使用 PowerShell cmdlet 处理我的存储帐户时遇到问题 我已经创建了一个存储帐户并在该存储帐户中创建了一个容器 接下来 我安装了 Azure Powershell SDK 和命令让等 并导入了pu
  • Powershell 中的“$”是什么?

    是什么意思 在 Powershell 中 Edit TechNet 答案 http technet microsoft com en us library hh847768 aspx同义反复 没有解释 成功 或 失败 的含义 包含上次操作的
  • Powershell v5.1 Invoke-RestMethod 并绕过代理

    我目前使用的是 Powershell V5 1 并且希望在 Invoke RestMethod 命令上绕过 Internet Explorer 代理 在 Powershell V6 中 有 NoProxy 选项 指示 cmdlet 将不使用
  • Powershell - 从图像网址下载图像

    对 powershell 的了解有限 我尝试从图像网址下载图像 例如这样 http hdwallpaperia com wp content uploads 2014 01 Mc Laren P1 Wallpaper Image Pictu
  • 在Powershell中传递引用类型参数

    function test1 param System Collections ArrayList x x Add Test1Add write in Test1 x x New Object System Collections Arra
  • 如何从powershell获取主机名?

    我如何获得hostname https stackoverflow com q 42014215 262852 for dur来自 powershell PS home thufir powershell gt PS home thufir

随机推荐

  • iCloud 和 Xcode 6 - 无处不在的容器

    我目前正在开发一个适用于 iOS 8 的应用程序 它使用 iCloud Drive 和 CloudKit Framework 一切都是使用 Xcode 6 设置的 When I try to submit my App to iTunesC
  • 如何构建F#类型的实现业务规则?

    我正在尝试在 F 中构建一个类型 当我获得该类型的对象时 我可以确定它处于有效状态 该类型称为JobId它只持有一个Guid 业务规则是 它必须是一个 Guid 但不能是空的 Guid 我已经在 C 中实现了该类型 但现在我想将其移植到 F
  • 从 ruby​​ c 扩展中的线程调用 IO 操作将导致 ruby​​ 挂起

    我在使用 C 扩展中的线程异步运行 ruby 代码时遇到问题 我有以下 C 代码 struct DATA VALUE callback pthread t watchThread void ptr void executer void pt
  • 如何检查 python 2.7 中的原始输入是否为整数?

    有没有一种方法可以用来检查raw input是一个整数 我在网上查了资料后发现了这个方法 print isinstance raw input number int 但是当我运行它并输入4例如 我得到FALSE 我对 python 有点陌生
  • 将 POI 工作簿流式传输到 servlet 输出流

    我在我的网络服务器上构建了一个非常大的 POI 工作簿 将整个工作簿保存在内存中 不会针对多个并发请求进行扩展 有没有办法可以逐步将工作簿写入 servlet 输出流 这应该会减少响应时间 并提高进程内存的效率 如果您要生成 Excel 2
  • Guice 和一般应用程序配置

    对于用 Java 编写的监控软件 我考虑使用 Google Guice 作为 DI 提供程序 项目需要从外部资源 文件或数据库 加载其配置 该应用程序设计为在独立模式或 servlet 容器中运行 目前 配置不包含用于依赖项注入的绑定或参数
  • 如何在Release模式下启用TRACE宏?

    The 跟踪宏 http msdn microsoft com en us library 4wyz8787 VS 80 aspx可用于在代码编译时向调试器输出诊断消息Debug模式 我在的时候需要同样的信息Release模式 有办法实现这
  • chrome浏览器粗边框问题

    边框折叠在 Chrome 浏览器中无法正常工作 有些边界线看起来很粗 请查看这张图片并帮助我解决这个错误 I need lite border for all rows but highlighted rows border are loo
  • 如何使用 scikit learn inverse_transform 和新值

    我有一组数据是我使用scikit learn PCA 我在使用 StandardScaler 执行 PCA 之前对数据进行了缩放 variance to retain 0 99 np scaled StandardScaler fit tr
  • Flex/Lex 和 Yacc/Bison 有什么区别?

    Flex Lex 和 Yacc Bison 之间有什么区别 我在网上疯狂搜索 没有找到任何可靠的答案 我可以在 Ubuntu 上安装纯 Lex 和 Yacc 还是可以只安装 flex 和 bison 我很困惑 Lex 或 Yacc 是否仍然
  • 查找点是否在给定圆心和半径的圆内

    我们有一个观点 x y 以及其他一些点 xi yi 我们如何确定哪一个 xi yi 在以圆心为圆心的圆内 x y 和半径r 给定数字 xi x 2 yi y 2 lt r 2
  • 如何找到与不受 git 控制的项目修订相对应的提交?

    考虑以下情况 我有一个项目的源代码 几个文件夹和文件 不幸的是 源代码不受版本控制 然而 这个项目有一个远程 git 存储库 如何在 git 存储库中找到与我的项目修订相对应的提交 我的强力方法是 克隆存储库 在不同的提交处签出并将签出的文
  • 登录系统设计允许每个用户一次在一台机器上登录

    我应该如何设计一个登录系统 使每个用户名一次只能在一个地方登录 我希望阻止用户将他们的用户名提供给其他人登录 这样他们就可以避免为每个用户付费 如果用户已经登录并尝试在另一台计算机上登录 我是否应该阻止第二次登录 如果用户在工作中登录然后尝
  • 使用vtk和k3d在jupyter笔记本中渲染gltf/glb文件

    我探索了如何在 jupyter 笔记本中内联渲染 gltf glb 文件以保持查看器回调交互性完整的可用方法 我最终使用 vtk 和 k3d 来实现这一目标 我遇到的两个障碍是 如何使用 vtkGLTFReader 从 vtkPolyDat
  • Angular 4 - 组件选择器在自定义指令中不起作用

    我正在 Angular 4 中使用 HTML 5 拖放 我创建了两个自定义属性指令来处理拖放事件 一切工作正常 除了当我尝试拖动组件选择器时 我希望它应该转换为 HTML 元素 但组件选择器本身就在那里 div div
  • 为什么 hudson/jenkins 尝试进行提交?

    我正在使用 Hudson 克隆 Git 存储库并构建它 我收到以下错误 FATAL Could not apply tag jenkins mus tomcat 2 2 hudson plugins git GitException Cou
  • Xcode 6 的最低 iOS 部署目标

    维基百科说 最低限度iOS部署目标Xcode6 是iOS7 我刚刚查了一下 XCode现在页面上列出6个GM 最低iOS部署目标已更改为iOS 5 1 1 我确实需要支持iOS6 0 想跟官方确认一下Xcode文档 我进行了搜索 但找不到此
  • AWS S3 控制台:发生意外错误

    我已经在 aws 上注册了一个帐户 创建了一个存储桶并上传了一些文件 我已将存储桶设置为静态网页 并且可以使用 url 访问文件 但是现在 当我进入 AWS 控制台并进入 S3 服务时 我看不到我的存储桶 我看到的只是消息显示 发生意外错误
  • RestKit 编译失败,cocoapods use_frameworks for swift

    我使用 RestKit 以及一些仅 Swift 的框架 当我使用 cocoapods use frameworks 时 标志 我收到编译错误 它在桥接头中找不到 CoreData h 也找不到 RKValueTransformers h 如
  • 如何使用Powershell读取txt文件中2个特殊字符之间的行

    嗨 我几乎是 Powershell 的新手 我需要读取文本文件中的一些特定行并将它们放入不同的数组中 我有一个如下所示的文件 Servers Server1 Server2 Server3 Server4 IP 10 10 10 10 10