powershell - 在 PowerShell 中检查文件中的最后一行是否为空
问题描述
我想在新行中向文件添加一些内容。但add-content
如果末尾没有换行符,则将字符串附加到最后一行。
例如,如果我想添加AAA
字符串并且我有一个文件file1.txt
my last line(last cursor position here)
结果将是
my last lineAAA
另一方面,如果我使用file2.txt
my last line
(last cursor position here)
该命令将导致
my last line
AAA
所以我需要检查最后一行是否为空。如果它不为空,我将在字符串中添加 `n 符号。
但是如果我运行命令
$lastLine = get-content $filename -Tail 1
if($lastLine.Length -ne 0) { ... }
即使我的最后一行不包含符号,它也会始终返回一个非空字符串的长度。如何检查我的最后一行是否为空?
解决方案
当您使用“Get-Content -Tail 1”时,它将始终恢复最后一个“非空”行。
# -----------------
# Your method returns the same line even if the file contains an empty line at the end of the file
# -----------------
$lastEmptyLine = Get-Content "test_EmptyLine.txt" -Tail 1
$lastNonEmptyLine = Get-Content "test_NonEmptyLine.txt" -Tail 1
($lastEmptyLine -match '(?<=\r\n)\z')
#False
($lastNonEmptyLine -match '(?<=\r\n)\z')
#False
因此,如果您想保留“测试”方法(而不仅仅是使用 Add-Content),您可以使用以下方法:
# -----------------
# This method can tell you if a file finishes by an empty line or not
# -----------------
$contentWithEmptyLine = [IO.File]::ReadAllText("test_EmptyLine.txt")
$contentWithoutEmptyLine = [IO.File]::ReadAllText("test_NonEmptyLine.txt")
($contentWithEmptyLine -match '(?<=\r\n)\z')
#True
($contentWithoutEmptyLine -match '(?<=\r\n)\z')
#False
# -----------------
# You can also use Get-Content with Raw option
# -----------------
$rawContentWithEmptyLine = Get-Content "test_EmptyLine.txt" -Raw
$rawContentWithoutEmptyLine = Get-Content "test_NonEmptyLine.txt" -Raw
($rawContentWithEmptyLine -match '(?<=\r\n)\z')
#True
($rawContentWithoutEmptyLine -match '(?<=\r\n)\z')
#False
-Raw忽略换行符并在一个字符串中返回文件的全部内容,并保留换行符。默认情况下,文件中的换行符用作分隔符将输入分隔为字符串数组。此参数是在 PowerShell 3.0 中引入的。
参考 :
获取内容 (Microsoft.PowerShell.Management)
推荐阅读
- android - Click on button == button appears in random location
- django - 如何对 django 中的计算变量求和?
- java - 如何在 Kotlin 中使用现有的比较器
- sql-server - 从链接表查询插入本地表很慢
- python - 遍历 2 个变量以创建标志
- angular - Firestore Service Worker 和推送通知
- javascript - 有没有办法传递一个变量来评估或从评估中加载一个 json 文件?
- r - R中条形图的聚合分组
- bazel - Bazel query that doesn't follow all select branches
- livecode - mergPopActivity 未能加载活动