[玩转系统] PowerShell - 逐行读取文件 [4 种方式]
作者:精品下载站 日期:2024-12-14 05:24:58 浏览:15 分类:玩电脑
PowerShell - 逐行读取文件 [4 种方式]
使用 Get-Content
Cmdlet
使用 Get-Content
cmdlet 在 PowerShell 中逐行读取文件。
使用获取内容 Cmdlet:
Get-Content E:\Test\File1.txt
输出 :
This is line one.
This is line two
This is line 3.
I am line 4.
Its line 5.
This is line 6.
This is line 7.
我们使用 Get-Content cmdlet 在 PowerShell 中逐行读取指定文件。用于获取指定项的内容或数据;这里,指定的项目可以是文本文件或函数。
对于文件,Get-Content
cmdlet 将一次读取一行并返回对象集合,其中每个对象都代表该行内容。
如果您使用的是 PowerShell 3.0 或更高版本,您还可以从文件的开头或结尾获取特定的行号。我们还可以使用 Get-Content
和 ForEach()
获得与上面相同的结果。
将 Get-Content Cmdlet 与 ForEach 结合使用:
ForEach ($line in Get-Content E:\Test\File1.txt) {echo $line}
输出 :
This is line one.
This is line two
This is line 3.
I am line 4.
Its line 5.
This is line 6.
This is line 7.
在上面的代码中,我们使用 Get-Content
获取指定文件的所有内容,然后使用 ForEach()
循环迭代检索到的内容的每一行。 对于每次迭代,我们使用 echo 来打印每一行。
通常,当我们需要操作每一行时,首选这种方法(使用 Get-Content
和 ForEach()
)。例如,如果我们想在开头添加 OK -
,我们将在 echo
语句中使用串联运算符 (+
),如下所示每一行然后显示它。
将 Get-Content Cmdlet 与 ForEach 结合使用:
ForEach ($line in Get-Content E:\Test\File1.txt) {echo ("OK - " + $line)}
输出 :
OK - This is line one.
OK - This is line two
OK - This is line 3.
OK - I am line 4.
OK - Its line 5.
OK - This is line 6.
OK - This is line 7.
现在,考虑一种情况,我们需要逐行读取指定的文件,但对于给定文本文件的开头/结尾处的特定行数,以下解决方案将适合我们。
使用 Get-Content
Cmdlet 读取部分数据
在PowerShell中逐行读取指定的文本文件:
- 使用
Get-Content
逐行读取指定文件。 - 使用
Select-Object
和-First
/-Last
参数名称来读取第一个/最后一个n
个数线。
使用带有 -First/-Last 参数的 Get-Content
Cmdlet:
$file_content = Get-Content E:\Test\File1.txt
$first_four_lines = $file_content | Select-Object -First 4
$last_four_lines = $file_content | Select-Object -Last 4
Write-Host @"
First Four lines:
$($first_four_lines)
Last Four lines:
$($last_four_lines)
"@
输出 :
First Four lines:
This is line one. This is line two This is line 3. I am line 4.
Last Four lines:
I am line 4. Its line 5. This is line 6. This is line 7.
在上一节中,我们了解了 Get-Content
cmdlet。在这里,我们再次使用它从指定文件中读取内容,但这一次,我们将读取的数据保存在 $file_content
变量中。
接下来,我们使用管道 (|
) 将 $first_content
变量的值转发到 Select-Object
cmdlet,该管道用于转发数据从上一个流程转到下一个流程。
Select-Object
cmdlet 用于选择对象/对象属性。我们还可以使用它从数组中的特定位置选择特定数量的唯一对象和对象。
此 cmdlet 允许我们使用各种参数,例如 -First
和 -Last
,从数组中选择特定数量的对象。
在我们的例子中,每一行都是一个对象,-First
选择前四行并将它们作为数组返回。 -Last
执行相同的操作,但从最后一个对象中选择对象。
如果我们正在寻找一种逐行读取整个文件但显示与特定模式匹配的文件的方法,那么以下解决方案适合我们。下面我们就来学习一下这个方法。
将 Get-Content
Cmdlet 与 -Like
运算符结合使用
要在 PowerShell 中逐行读取给定文件:
- 定义模式后,使用
ForEach()
迭代我们使用Get-Content
cmdlet 读取的文件的每一行。 - 在每次迭代中,使用
if
语句和-Like
运算符在当前行中搜索指定模式。 - 在
if
块中,如果满足if
条件,则使用Write-Output
cmdlet 打印当前行。
将 Get-Content 与 -Like 运算符表达式结合使用:
foreach($current_line in Get-Content E:\Test\File1.txt)
{
if($current_line -like "*[0-9].")
{
Write-Output $current_line
}
}
输出 :
This is line 3.
I am line 4.
Its line 5.
This is line 6.
This is line 7.
此代码示例与第一部分类似,其中我们将 Get-Content
与 ForEach()
循环结合使用。唯一的区别是使用 if
语句和 -Like
运算符来搜索给定模式,并在满足条件时显示 $current_line
if
条件。
使用 -Like
运算符的优点是我们不需要转义反斜杠。现在,我们使用什么模式?我们仅在 PowerShell 控制台上打印那些以任何数字结尾并紧跟一个点 (.
) 的行。
使用 switch
语句
使用switch
在PowerShell中逐行读取给定的文本文件。
使用 switch 语句:
$regex = '^I'
switch -regex -file E:\Test\File1.txt {
$regex {
"line is: $_"
}
}
输出 :
line is: I am line 4.
line is: Its line 5.
我们使用带有 -Regex
和 -File
参数的开关,其中 -File
用于指定读取内容的文件名, -Regex
用于执行值与条件的正则表达式匹配。
在上面的代码示例中,我们将自定义正则表达式值编写为 I
,确保匹配行以 I
开头。如果指定的正则表达式条件评估为 True,它将打印上面给出的输出中所示的行。
如果您想了解 $_
,请不要担心;它是 PowerShell 中的一个自动变量,用于保存满足正则表达式条件的行。
使用 [System.IO.File]
类的 ReadLines()
使用[System.IO.File]
类的ReadLines()
方法在PowerShell中逐行读取指定文件。
使用 System.IO.File 类的 ReadLines():
foreach($line in [System.IO.File]::ReadLines("E:\Test\File1.txt")){
Write-Output $line
}
输出 :
This is line one.
This is line two
This is line 3.
I am line 4.
Its line 5.
This is line 6.
This is line 7.
使用 [System.IO.File]
类的 ReadLines()
方法是 Get-Content
cmdlet 的绝佳替代方案来读取文本文件(位于给定路径中)逐行。
到目前为止,我们已经介绍了逐行读取文件的各种方法,但是如果有空行怎么办?让我们看看以下方法来学习如何处理空行。
使用 StreamReader 类
要在 PowerShell 中逐行读取文件:
- 使用
New-Object
cmdlet 创建一个StreamReader
对象。 - 使用
while
循环一次读取一行并检查它是否不为空。 - 如果当前行不为空,请使用
Write-Host
cmdlet 打印行号以及该行的文本。
使用 StreamReader 类:
$stream_reader = New-Object System.IO.StreamReader{E:\Test\File1.txt}
$line_number = 1
while (($current_line =$stream_reader.ReadLine()) -ne ''){
Write-Host "$line_number $current_line"
$line_number++
}
输出 :
1 This is line one.
2 This is line two
3 This is line 3.
4 I am line 4.
5 Its line 5.
在这里,我们使用 New-Object cmdlet 创建了一个 StreamReader
对象,并将其保存在 $stream_reader
变量中。接下来,我们声明一个 $line_number
并使用 1
对其进行初始化;我们将使用这个变量在读取时维护行号。
接下来,我们使用$stream_reader
对象的.ReadLine()
方法逐行读取指定文件;在每次迭代中,$current_line
变量将使用 .ReadLine()
方法返回的文本进行更新。如果 $current_line
不等于空行,我们只能在 while
内移动。
如果不是空行,则将 $line_number
与 $current_line
一起打印,并将 $line_number
增加 1
>;否则,退出 while
循环。请记住,一旦找到空行,该循环就会存在。如果要读取所有文件(不包括空行),则必须根据需要更新代码。
如果不这样做,您也可以从文件中删除空行,并通过上述方法逐行读取文件。
这就是如何在 PowerShell 中逐行读取文件的全部内容。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag