在 Powershell 中获取特定行 variable/array

Getting specific rows in a Powershell variable/array

我希望我能够尽可能简单地提出我的问题。我对使用 PowerShell 还很陌生。

现在回答我的问题:

我使用 Invoke-Sqlcmd 到 运行 一个查询,它将数据放在一个变量中,比方说 $Data.

在这种情况下,我在 SQL 数据库中查询触发器。

然后我将数组拆分以获得更具体的信息:

$Data2 = $Data | Where {$_.table -like 'dbo.sportswear'}
$Data3 = $Data2 | Where {$_.event -match "Delete"}

所以最后我有一个带有这些索引的变量(?),我不确定它们是否被称为索引。

table
trigger_name
activation
event
type
status
definition

现在我只想检查 definition 中的内容。 所以我创建了一个 $Data4 = $Data3.definition,到目前为止一切顺利。

但现在我有一个大文本,我只想要 2-3 个特定行的内容。 当我使用 $Data4[1]$Data4[1..100] 时,我意识到 PowerShell 将每个字符视为 line/row.

但是当我刚写 $Data4 时,它向我展示了带有段落、换行等格式的内容。

有谁知道如何获取变量的特定行或行?

谢谢大家:)

看来 $Data4 是一个格式化的字符串。由于它是单个字符串,因此任何索引元素查找 return 个单个字符(System.Char 类型)。如果您希望索引到 return 个更长的子字符串,您需要以某种方式将您的字符串拆分为多个字符串,或者想出一个更复杂的搜索机制。

如果我们假设您之后的行是由换行符 and/or 回车符 return 分隔的实际行,您可以只拆分这些换行符并使用索引来访问您的行:

# Array indexing starts at 0 for line 1. So [1] is line 2.
# Outputs lines 2,3,4
($Data4 -split '\r?\n')[1..3]

# Outputs lines 2,7,20
($Data4 -split '\r?\n')[1,6,19]

-split 使用正则表达式匹配字符并对所有匹配项执行字符串拆分。它会产生一个子字符串数组。 \r 匹配回车 return。 \n 匹配换行符。 ? 匹配 0 个或一个字符,如果换行符前没有回车 return,则需要这样做。