sql—获取powershell变量/数组中的特定行

rmbxnbpk  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(361)

我希望我能把问题问得尽可能简单。我对使用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将每个字符视为一行/行。
但是当我写的时候 $Data4 它给我看的内容格式很好的段落,新行等。
有人知道如何获得变量的特定行吗?
谢谢大家:)

vh0rcniy

vh0rcniy1#

看来 $Data4 是格式化的字符串。因为它是单个字符串,所以任何索引元素查找都返回单个字符(类型) System.Char ). 如果希望索引返回更长的子字符串,则需要以某种方式将字符串拆分为多个字符串,或者提出更复杂的搜索机制。
如果我们假设您要查找的行是由换行符和/或回车符分隔的实际行,则您可以只拆分这些换行符,并使用索引访问您的行:


# 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` 匹配回车。 `\n` 匹配换行符。 `?` 匹配0或一个字符,这是在换行符之前没有回车符的情况下需要的。

相关问题